Hi Maxim,
here’s what I did in the REPL: --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> ,m (ice-9 exceptions) scheme@(ice-9 exceptions)> (define (my/guile-system-error-converter key args) (apply (case-lambda ((subr msg-args msg errno . rest) ;; XXX TODO we should return a more specific error ;; (usually an I/O error) as expected by R6RS programs. ;; Unfortunately this often requires the 'filename' (or ;; other?) which is not currently provided by the native ;; Guile exceptions. (make-exception (make-external-error) (make-exception-with-origin subr) (apply make-exception-with-message msg) (make-exception-with-irritants msg-args))) (_ (guile-external-error-converter key args))) args)) scheme@(ice-9 exceptions)> (set! guile-exception-converters (acons 'system-error my/guile-system-error-converter guile-exception-converters)) scheme@(ice-9 exceptions)> ,m (guile-user) scheme@(guile-user)> (guard (c ((message-condition? c) (format #t "message: ~a~%" (condition-message c)))) (canonicalize-path "/doesntexist")) message: No such file or directory $11 = #t scheme@(guile-user)> --8<---------------cut here---------------end--------------->8--- -- Ricardo