sexp_of_t
uses a global table of sexp converters. To register a converter for a new
exception, add [@@deriving sexp]
to its definition. If no suitable converter is
found, the standard converter in Printexc
will be used to generate an atomic
S-expression.
Same as raise
, except that the backtrace is not recorded.
Types with format4
are hard to read, so here's an example.
let foobar str =
try
...
with exn ->
Exn.reraisef exn "Foobar is buggy on: %s" str ()
Executes f
and afterwards executes finally
, whether f
throws an exception or
not.
handle_uncaught ~exit f
catches an exception escaping f
and prints an error
message to stderr. Exits with return code 1 if exit
is true
. Otherwise returns
unit.
Note that since OCaml 4.02.0, it is not needed to use this at the entry point of your program as the OCaml runtime will do better than this function.
handle_uncaught_and_exit f
returns f ()
, unless that raises, in which case it
prints the exception and exits nonzero.
Traces exceptions passing through. Useful because in practice backtraces still don't seem to work.
Example:
let rogue_function () = if Random.bool () then failwith "foo" else 3
let traced_function () = Exn.reraise_uncaught "rogue_function" rogue_function
traced_function ();;
: Program died with Reraised("rogue_function", Failure "foo")
The to_string
function is slightly tweaked to avoid escaping the string
content of Failure
.
This is also an ever so slight variation of to_string
target more at user
than developers (Failure s
is just printed as s
)
unwrap e
Tries to unwrap an exception to find the original cause of the error (Finally for instance has the propency to burry exception...). This is useful when matching on exceptions.