Next: Processing of Errors, Up: Errors [Contents][Index]
エラーのシグナリング(signaling)とは、エラーの処理を開始することを意味します。エラー処理は通常、実行中のプログラムのすべて、または一部をアボート(abort)して、エラーをハンドルするためにセットアップされた位置にreturnします。ここでは、エラーをシグナルする方法を記述します。
ほとんどのエラーは、たとえば、整数にたいしてCARを求めたり、バッファーの最後で1文字前方に移動したときなどのように、他の目的のために呼び出したLisp基本関数の中で、“自動的”にシグナルされます。関数error
とsignal
で、明示的にエラーをシグナルすることもできます。
ユーザーがC-gをタイプしたときに発生するquitは、エラーとは判断されませんが、ほとんどはエラーと同様に扱われます。Quittingを参照してください。
すべてのエラーメッセージはそれぞれ、何らかのエラーメッセージを指定します。そのメッセージは、何が悪いのか(“File does not exist”)、物事がどうしてそうあるべきではない(“File must exist”)かを示すべきです。Emacs Lispの監修では、エラーメッセージは大文字で開始され、句読点で終わるべきではありません。
この関数は、format-stringとargsにたいして、format
(Formatting Stringsを参照してください)を適用することにより構築されたエラーメッセージとともに、エラーをシグナルします。
以下は、error
を使用する典型的な例です:
(error "That is an error -- try something else") error→ That is an error -- try something else
(error "You have committed %d errors" 10) error→ You have committed 10 errors
2つの引数 — エラーシンボルerror
と、format
によりreturnされる文字列を含むリスト —
でsignal
を呼び出すことにより、error
は機能します。
警告: エラーメッセージとして固定の文字列を使用したい場合、単に(error
string)
とは記述しないでください。もしstringが‘%’を含む場合、それはフォーマット指定子(format
specifier)として解釈されてしまうので、望む結果は得られません。かわりに、(error "%s"
string)
を使用してください。
この関数は、error-symbolにより命名されるエラーをシグナルします。引数dataは、エラーの状況に関連する追加のLispオブジェクトのリストです。
引数error-symbolは、エラーシンボル(error symbol) —
define-error
により定義されYたシンボル — でなければなりません。これはEmacs
Lispが異なる種類のエラーをクラス分けする方法です。エラーシンボル(error symbol)、エラーコンディション(error
condition)、コンディション名(condition name)の説明については、Error Symbolsを参照してください。
エラーが処理されない場合、エラーメッセージをプリントするために2つの引数が使用されます。このエラーメッセージは通常、error-symbolのerror-message
プロパティーにより提供されます。dataが非nil
の場合、その後にコロンと、dataの評価されていない要素を、カンマで区切ったリストが続きます。error
が発生した場合、エラーメッセージは、dataのCAR(文字列でなければなりません)です。file-error
のサブカテゴリーは、特別に処理されます。
data内のオブジェクトの数と重要性は、error-symbolに依存します。たとえば、wrong-type-argument
エラーでは、リスト内には2つのオブジェクト
— 期待する型を記述する述語と、その型への適合に失敗したオブジェクト — であるべきです。
エラーを処理する任意のエラーハンドラーにたいして、error-symbolとdataの両方を利用できます。condition-case
は、ローカル変数を(error-symbol
. data)
というフォームでバインドします(Handling Errorsを参照してください)。
関数signal
は、決してreturnしません。
(signal 'wrong-number-of-arguments '(x y)) error→ Wrong number of arguments: x, y
(signal 'no-such-error '("My unknown error condition")) error→ peculiar error: "My unknown error condition"
この関数は、error
とまったく同じように振る舞いますが、error
ではなく、user-error
というエラーシンボルを使用します。名前が示唆するように、このエラーはコード自身のエラーではなく、ユーザーパートのエラーの報告を意図しています。たとえば、Infoの閲覧履歴の開始を超えて履歴を遡るためにコマンドInfo-history-back
(l)を使用した場合、Emacsはuser-error
をシグナルします。このようなエラーでは、たとえdebug-on-error
が非nil
であっても、デバッガーへのエントリーは発生しません。Error Debuggingを参照してください。
Common Lispに関する注意: Emacs Lispには、Common Lispのような継続可能なエラーのような概念は存在しません。