Kawa supports the exception framework and forms from R6RS and R7RS. See Exceptions for details.
You can also work with native Java exceptions at a low level.
The primitive-throw
procedure throws a Throwable
value.
It is implemented just like Java’s throw
.
(primitive-throw (java.lang.IndexOutOfBoundsException "bad index"))
You can catch an exception with the try-catch
syntax. For example:
(try-catch (do-a-bunch-of-stuff) (ex java.lang.Throwable (format #f "caught ~a~%~!" ex) (exit)))
A try-finally
does the obvious:
(define (call-with-port port proc) (try-finally (proc port) (close-port port)))
Both try-catch
and try-finally
are
expression forms that can return values, while the corresponding
Java forms are statements that cannot return values.