Version: 4.1.4.1
8 Exception utilities
| (require (planet untyped/unlib/exn)) |
Utilities for raising and handling exceptions.
| (raise-exn id message arg ...) |
Raises an exception with a default set of continuation marks. id is the identifier of the exception’s structure type transformer binding (e.g. exn or exn:fail). message and args are passed to the exception’s constructor, along with the value of current-continuation-marks.
Examples: |
| > (with-handlers ([exn? pretty-print]) | | (raise-exn exn:fail "Oops!")) |
|
#(struct:exn:fail | "Oops!" | #<continuation-mark-set>) |
|
| > (with-handlers ([exn? pretty-print]) | | (raise-exn exn:fail:syntax "Oops!" (list #'a #'b #'c))) |
|
#(struct:exn:fail:syntax | "Oops!" | #<continuation-mark-set> | (#<syntax:3:0> | #<syntax:3:0> | #<syntax:3:0>)) |
|
| (reraise-exn old-exn new-exn new-message arg ...) |
Raises new-exn with a message of:
(string-append (exn-message old-exn) ": " new-message)
and the same continuation marks as old-exn. Any additional args are passed to the constructor of new-exn.
Examples: |
| > (with-handlers ([exn? pretty-print]) | | (with-handlers ([exn? (lambda (e) | | (reraise-exn e exn:fail | | "Looks serious"))]) | | (raise-exn exn "Oops!"))) |
|
#(struct:exn:fail | "Looks serious: Oops!" | #<continuation-mark-set>) |
|