エラーが通知されると、signal
は、
エラーに対する有効なハンドラ(handler)を探します。
ハンドラは、Lispプログラムの一部でエラーが発生した場合に
実行されるように指定されたLisp式の列です。
エラーに対して適用可能なハンドラがあると、
そのハンドラが実行され、ハンドラに続いて制御は復旧します。
ハンドラは、そのハンドラを設定したcondition-case
の環境で実行されます。
condition-case
の内側で呼び出された関数はすべて終了しているので、
ハンドラからそれらへ戻ることはできません。
エラーに適用可能なハンドラがなければ、 現在のコマンドは終了し、制御はエディタコマンドループへ戻ります。 というのは、コマンドループには、 すべての種類のエラーに対する暗黙のハンドラがあるからです。 コマンドループのハンドラは、エラーシンボルと関連するデータを使って エラーメッセージを表示します。
明示的なハンドラがないエラーは、Lispデバッガを呼び出すこともあります。
変数debug-on-error
(see Error Debugging)が
nil
以外であると、デバッガが有効になります。
エラーハンドラと違って、デバッガはエラーの環境で実行されるので、
エラー時の変数の正確な値を調べることができます。