Hello,

I would like to dispatch exceptions based on errno, in particular to
return #f on ENOENT, and re-raise the exception otherwise.  My current
(working as far as I can tell) solution is:

--8<---------------cut here---------------start------------->8---
  (with-exception-handler
      (λ (exc)
        (and (not (= ENOENT (car (list-ref (exception-args exc) 3))))
             (raise-exception exc)))
    (λ ()
      (with-input-from-file (path realm query) read))
    #:unwind? #t
    #:unwind-for-type 'system-error)
--8<---------------cut here---------------end--------------->8---

However, I do not consider it very elegant, especially this part:

--8<---------------cut here---------------start------------->8---
(car (list-ref (exception-args exc) 3))
--8<---------------cut here---------------end--------------->8---

Is there better way to do this?

Second question is how to print exceptions including a stack trace.  I
noticed there is display-error, however it takes a frame argument and I
am not sure where to get it.  I did not found any exception-frame
procedure.  However since the default exception-handle *is* able to
print the stack on exception, I assume it is possible.  Any tips?

Thanks,
Tomas

-- 
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

Attachment: signature.asc
Description: PGP signature

Reply via email to