Traiter une condition

La façon la plus simple de traiter une condition est d'utiliser la macro handler-case. Elle établit des traitants et effectue un saut non local lorsque la condition est traitée.

Son premier argument est une expression à évaluer avec les traitants établis, puis une suite de clauses, une clause pour chaque type de condition. La clause contient le type de la condition, une variable facultative contenant la condition traitée et une suite d'expressions à évaluer. La valeur de la dernière expression sera la valeur de l'expression handler-case (progn implicite). Exemples :

* (defun problem (n)
    (cond ((zerop n) (/ 10 n))
          (t (print 'before)
             (problem (1- n))
             (print 'after))))

PROBLEM
* (handler-case (problem 3)
    (error () 22))

BEFORE
BEFORE
BEFORE
22
* (handler-case (problem 3)
    (division-by-zero () 22))

BEFORE
BEFORE
BEFORE
22
* (handler-case (problem 3)
    (floating-point-overflow () 22)
    (file-error () 11))

BEFORE
BEFORE

Arithmetic error DIVISION-BY-ZERO signalled.
encore des messages, puis l'invite du débogueur

Irene DURAND
2011-10-14