Next: , Previous: Errors, Up: Errors


9.5.3.1 エラーの通知方法

ほとんどのエラーは、他の目的で呼び出したLisp関数の内部で『自動的』に 通知されます。 整数のcarを計算しようとしたり、 バッファの末尾で1文字進めようとしたりしたときなどです。 関数errorや関数signalで、 明示的にエラーを通知することもできます。

ユーザーがC-gを打ったときに発生する中断は、 エラーとは考えませんが、エラーのように扱います。

— Function: error format-string &rest args

この関数は、format-stringargsformat(see String Conversion)を適用して作った エラーメッセージを伴ったエラーを通知する。

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

errorは、2つの引数、 エラーシンボルerrorformatが返す文字列を含むリスト でsignalを呼び出すことで動作する。

警告: 独自のエラーメッセージをそのまま使いたい場合に、 単に(error string)とは書かないこと。 stringに‘%’が含まれていると、 それは書式付け指定と解釈され、予測不能な結果を招く。 そのかわりに、(error "%s" string)を使う。

— Function: signal error-symbol data

この関数は、error-symbolという名前のエラーを通知する。 引数dataは、エラーの状況に関連したLispオブジェクトのリストである。

引数error-symbolは、エラーシンボル(error symbol)である 必要がある。 つまり、属性error-conditionsを持つシンボルであり、 その属性値は条件名のリストである。 これにより、Emacsはエラーの異なる種類を分類する。

dataのオブジェクトの個数と重要性はerror-symbolに依存する。 たとえば、エラーwrong-type-argでは、 リストには2つのオブジェクトがあるはずで、 予期した型を表す述語とその型に一致しなかったオブジェクトである。 エラーシンボルの説明は、see Error Symbols

error-symboldataの両者は、 任意のエラーハンドラで利用できる。 condition-caseは、ローカル変数に フォーム(error-symbol . data)のリストを束縛する (see Handling Errors)。 エラーが処理されないと、これらの2つの値はエラーメッセージの表示に使われる。

関数signalはけっして戻らない (しかし、Emacsの古い版では戻る場合もある)。

          (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"

Common Lispに関した注意: Emacsには、Common lispの継続可能なエラーの概念に相当するものはない。