On this page:
raise-exn
reraise-exn

10 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.

Example:

  > (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>)