Réponses:
BTW, une option alternative peut être quelque chose comme:
(let ((error t))
(unwind-protect
(prog1 (call-function)
(setq error nil))
(when error (cleanup))))
L'avantage est que vous évitez d'attraper et de renvoyer l'erreur, ce qui signifie par exemple que le débogueur vous montrera la bonne trace (celle qui correspond à la source réelle de l'erreur, plutôt que celle qui correspond à vous renvoyant l'erreur de quelqu'un d'autre) ).
Une autre différence est que ce cleanup
sera appelé non seulement en cas d'erreur mais aussi si le code est interrompu par un C-g
ou un appel à throw
.
quit
n'a pas error
parmi ses parents). OIEau vous van attraper aussi avec , condition-case
mais pour que vous avez besoin de mettre quit
ainsi error
. Bien sûr, cela ne gérera toujours pas le cas du «lancer».
Vous recherchez signal
:
(condition-case err
(call-function)
(error
(cleanup)
(signal (car err) (cdr err)))) ; reraise `err'
signal
, mais son prototype ne l'est (signal ERROR-SYMBOL DATA)
pas (signal ERROR)
.
car
et cdr
. Réponse mise à jour.
condition-case
attraperkeyboard-quit
?