- Title
- handler-case
- Type
- Macro
- Arguments
- handler-case FORM &rest CASES
- Package
- lisp
- Section
- エラー
- File
- handler.l
例外をキャッチします。
詳細はエラー処理関連を参照してください。キャッチした例外は
si:*condition-stringで対応する文字列を取得できるようです。
(handler-case
例外が発生しそうな処理
(エラーのシンボル1 (仮引数1) エラー処理1)
(エラーのシンボル2 (仮引数2) エラー処理2)
(エラーのシンボル3 (仮引数3) エラー処理3))
例えば、例外が発生しそうな処理で(error エラーシンボル2)が起きると、途中
の処理をすっとばして、エラー処理2が実行されます。そこで対応出来れば処理
を継続しますが、対応できなければ(error 仮引数2)を実行して、より上位の
handler-caseに対応をお願いします。どこまでいっても対応できなければ、
xyzzyがエラーダイアログを出して処理を終了します。
使用例:
;;; 例外が出ても、個々に対応しつつ処理を継続する場合
;;; with-output-to-stringを使ってるのは変数が煩わしいから
(with-output-to-string (out)
(dolist (i '((6 3) (6 0) (6 "a")))
(handler-case
(/ (car i) (cadr i))
(division-by-zero (c)
(format out "division-by-zero: ~a~%" (si:*condition-string c)))
(error (c)
(format out "error:\t ~a~%" (si:*condition-string c))))))
=> "division-by-zero: 0で除算しました: /: (6 0)
error: 不正なデータ型です: \"a\": number"
- Seealso
- ignore-errors
- trap-errors
- unwind-protect
- error
- エラー処理関係