エラーの名前であるシンボルは(全て)、(そのプロパティーリストに) error-conditions プロパティーを持たなくてはいけません(セクション 8.5 [プロパ ティーリスト]、ページ 69 参照)。このプロパティーの値は(対応する)エラーコンデ ィションシンボルのリストです。エラーが出され、そのエラーシンボルに対応するコ ンディションを規定する condition-case ハンドラが存在する場合、そのハンドラに 制御が渡されます。
エラーシンボルは、error-conditions リストとともに (そのエラーが出され、扱われ なかった場合に表示されるストリングを値として持つ) error-message プロパティーを 持たなくてはいけません。
ハンドラは(エラーシンボルではなく) エラーコンディションを用いなくてはいけない 点を理解しておくことが重要です。しかし、(一般に)エラーの名前として用いられるシ ンボルは、 (それに対する)コンディションの名前としても用いられます。以下の例に おいて、foo-error はエラーシンボルで、これは signal の呼び出しで用いられます。 これに対するコンディションは foo-condition で、これは condition-case ハンドラ が用いなくてはいけないシンボルです。
(put 'foo-error 'error-message "A Foo-ish Error") => "A Foo-ish Error" (put 'foo-error 'error-conditions '(error foo-condition))
=> (error foo-condition) (signal 'foo-error '(ARG1 ARG2)) ---------- Echo Area ---------- A Foo-ish Error: ARG1, ARG2 -------------------------------
(condition-case V (signal 'foo-error '()) (foo-condition (format "A Foolish Error: %s" V))) => "A Foolish Error: (foo-error)"
(標準の) GNU Emacs に存在するエラーシンボルとコンディションの(完全な)リストを 以下に示します。 quit を除く(全ての)エラーシンボルが、そのコンディションの 1つ として error コンディションを持つ点に注意して下さい。これは、プログラムが (quit を除く)全てのエラーをハンドラ中のコンディションに error を用いることでト ラップできるようにするためです。 quit エラーは(カレントな)計算のアボートを意図 したものであるため、quit エラーは error コンディションを持ちません。
(各エラーはどのように生じるかという記述へのクロスリファレンス!! もしくはここで 述べる。それとも補足に動かす??)
error
"error" (error)
quit
"Quit" (quit)
no-catch
"No catch for tag (訳注:タグに対する catch が存在しない)" (no-catch error)
"Invalid read syntax (訳注:read シンタックスが正しくない)" (invalid-read-syntax error)
setting-constant
"Attempt to set a constant symbol(訳注:コンスタントシンボルをセットし ようとした)" (setting-constant error)
void-function
"Symbol's function definition is void(訳注:シンボルの関数定義が void である)" (void-function error)
void-variable
"Symbol's value as variable is void (訳注:変数としてのシンボル値が void である)" (void-variable error) invalid function "Invalid function (訳注:関数が正しくない)" (invalid-function error)
"Wrong type argument (訳注:アーギュメントのタイプが誤まっている)" (wrong-type-argument error)
"Args out of range (訳注:アーギュメントがレンジをはずれている)" (args-out-of-range error)
"Wrong number of arguments (訳注:アーギュメントの数が誤まっている)" (wrong-number-of-arguments error)
search-failed
"Search failed (訳注:サーチが失敗した)" (search-failed error)
invalid-regexp
"Invalid regexp (訳注:正規表現が正しくない)" (invalid-regexp error)
arith-error
"Arithmetic error (訳注:算述エラー)" (arith-error error)
"End of buffer (訳注:バッファの終り)" (end-of-buffer error)
"Beginning of buffer (訳注:バッファの先頭)"
(beginning-of-buffer error)
"Buffer in read-only (訳注:バッファがリードオンリーである)" (buffer-read-only error)
file-error
"File error (訳注:ファイルエラー)" (file-error error)
file-locked
"" (file-locked file-error error)
"End of file during parsing (訳注:パージング中にファイルの終りになっ た)" (end-of-file error)
"File already exists (訳注:すでにファイルが存在している)" (file-already-exists file-error error) file-supersession (filesupersession file-error error)