前: Handling Errors, 上: Errors
エラーを通知するときには、読者が意図するエラーの種類を指定する エラーシンボル(error symbol)を指定します。 各エラーには、それを分類する一意な名前があります。 これは、Emacs Lisp言語で定義されたエラーを細分類したものです。
これらの細分類は、エラー条件(error conditions)と呼ばれる
より大きなクラスの階層にまとめられています。
エラー条件は、条件名(condition names)で識別します。
もっとも細かい分類は、エラーシンボルそのものです。
各エラーシンボルは条件名でもあります。
より大きなクラスを表す条件名error
もあります。
これはすべての種類のエラーを表します。
したがって、各エラーには、1つ以上の条件名があります。
つまり、error
、error
とは別のエラーシンボル、あるいは、
その中間の分類に属するものです。
あるシンボルがエラーシンボルであるためには、そのシンボルには、
条件名のリストを与える属性error-conditions
があることが必要です。
このリストは、そのエラーが属するエラー条件を定義します。
(エラーシンボルそのものと、シンボルerror
は、
つねにこのリストの要素であること。)
したがって、条件名の階層は、
エラーシンボルの属性error-conditions
で定義されます。
error-conditions
リストに加えて、
エラーシンボルには、属性error-message
も必要です。
この属性の値は、そのエラーが処理されないときに表示される文字列です。
属性error-message
があるのに、それが文字列でなければ、
エラーメッセージ`peculiar error'を使います。
以下に、新たなエラーシンボルnew-error
の定義方法を示します。
(put 'new-error 'error-conditions '(error my-own-errors new-error)) => (error my-own-errors new-error) (put 'new-error 'error-message "A new error") => "A new error"
このエラーには、3つの条件名があります。
もっとも細かい分類であるnew-error
、
それより大きな分類とであると考えているmy-own-error
、
もっとも大きな分類であるerror
です。
エラー文字列は大文字で始めるべきですが、ピリオドで終えません。 これは、Emacsの他の慣習と整合をとるためです。
普通、Emacs自身がnew-error
を通知することはありえません。
つぎのように、読者のコードで明示的に
signal
(see Signaling Errors)を呼んだときだけです。
(signal 'new-error '(x y)) error--> A new error: x, y
このエラーは、3つの条件名のどれでも処理できます。
つぎの例は、new-error
と
クラスmy-own-errors
の任意の他のエラーを処理します。
(condition-case foo (bar nil t) (my-own-errors nil))
エラーを分類する重要な方法は、それらの条件名によることです。
つまり、エラーに一致するハンドラを探すために条件名を使います。
エラーシンボルは、意図したエラーメッセージと条件名のリストを指定する
簡便な方法を提供するだけです。
signal
に、1つのエラーシンボルではなく、
条件名のリストを指定するのではわずらわしいでしょう。
一方、条件名なしにエラーシンボルだけを使うのでは、
condition-case
の能力をいちじるしく損ないます。
条件名があることで、エラーハンドラを書くときにさまざまなレベルに
一般化してエラーを分類できるのです。
エラーシンボルだけを使ったのでは、
最細分類以外のレベルを削除してしまうことになります。
すべての標準エラー名とそれらの条件名については、 See Standard Errors。