Next: 非ローカル脱出のクリーンアップ, Previous: catch
とthrow
の例, Up: 非ローカル脱出 [Contents][Index]
Emacs Lispが何らかの理由で評価できないようなフォームの評価を試みると、エラー(error)がシグナル(signal)されます。
エラーがシグナルされるとエラーメッセージを表示して、カレントコマンドの実行を終了するのがEmacsデフォルトの反応です。たとえばバッファーの最後でC-fとタイプしたときのように、ほとんどの場合にはこれは正しい反応になります。
複雑なプログラムでは単なる終了が望ましくない場合もあるでしょう。たとえばそのプログラムがデータ構造に一時的に変更を行なっていたり、プログラム終了前に削除する必要がある一時バッファーを作成しているかもしれません。このような場合には、エラー時に評価されるクリーンアップ式(cleanup
expressions)を設定するために、unwind-protect
を使用するでしょう(非ローカル脱出のクリーンアップを参照)。サブルーチン内のエラーにもかかわらずに、プログラムの実行を継続したいときがあるかもしれません。このような場合には、エラー時のリカバリーを制御するエラーハンドラー(error
handlers)を設定するためにcondition-case
を使用するでしょう。
カレントコマンドの実行を終了せずに問題を報告するためには、かわりに警告の発行を考慮しましょう。警告のレポートを参照してください。
エラーハンドラーを使用せずにプログラムの一部から別の部分へ制御を移すためには、catch
とthrow
を使用します。明示的な非ローカル脱出: catch
とthrow
を参照してください。