handler-case expression
[[{!error-clause}* | !no-error-clause]] => {result}*
clause ::=!error-clause | !no-error-clause
error-clause ::=(typespec ([var]) {declaration}* {form}*)
no-error-clause ::=(:no-error lambda-list {declaration}* {form}*)
expression—a form.
typespec—a type specifier.
var—a variable name.
lambda-list—an ordinary lambda list.
declaration—a declare expression; not evaluated.
form—a form.
results—In the normal situation, the values returned are those that result from the evaluation of expression; in the exceptional situation when control is transferred to a clause, the value of the last form in that clause is returned.
handler-case executes expression in a dynamic environment where various handlers are active. Each error-clause specifies how to handle a condition matching the indicated typespec. A no-error-clause allows the specification of a particular action if control returns normally.
If a condition is signaled for which there is an appropriate error-clause during the ex searched s (+ 3 'a)) |> Fooey: The argument to +, A, is not a number. |> [1] Supply a replacement for A. |> [2] Return to Cloe Toplevel. |> Choice: 1 |> Form to evaluate and use: (+ 5 'b) |> Fooey: The argument to +, B, is not a number. |> [1] Supply a replacement for B. |> [2] Supply a replacement for A. |> [3] Return to Cloe Toplevel. |> Choice: 1 |> Form to evaluate and use: 1 => 9
invoke-debugger
When evaluating code typed in by the user interactively, it is sometimes useful to have the hook function bind *debugger-hook* to the function that was its second argument so that recursive errors can be handled using the same interactive facility.