Appendix F 标准错误

下面列出标准 Emacs 中较为重要的错误符号,按概念分组。列表包含每个符号对应的提示信息,以及对该错误产生原因说明的交叉引用。

每个错误符号都有一组父错误条件,由符号列表构成。通常该列表包含错误符号自身以及符号 error。偶尔也会包含其他符号,这些属于中间分类,范围比 error 更窄,但比单个错误符号更广。例如,所有访问文件时产生的错误都带有条件 file-error。如果此处未说明某个错误符号带有额外错误条件,则表示它没有。

作为特殊例外,错误符号 quitminibuffer-quit 不带有条件 error,因为退出操作不被视为错误。

这些错误符号大多在 C 代码中定义(主要位于 data.c),部分则在 Lisp 中定义。例如,文件 userlock.el 定义了 file-lockedfile-supersession 错误。随 Emacs 分发的若干专用 Lisp 库也会定义各自的错误符号,此处不尝试全部列出。

See 错误,了解错误的产生与处理方式。

error

提示信息为 ‘error’。See 错误

quit

提示信息为 ‘Quit’。See 退出

minibuffer-quit

提示信息为 ‘Quit’。属于 quit 的子类别。See 退出

args-out-of-range

提示信息为 ‘Args out of range’。尝试访问序列、缓冲区或其他容器类对象范围之外的元素时触发。See 序列、数组与向量,另见 文本

arith-error

提示信息为 ‘Arithmetic error’。尝试执行整数除以零操作时触发。See 数值转换,另见 算术运算

beginning-of-buffer

提示信息为 ‘Beginning of buffer’。See 按字符移动

buffer-read-only

提示信息为 ‘Buffer is read-only’。See 只读缓冲区

circular-list

提示信息为 ‘List contains a loop’。遇到环形结构时触发。See 循环对象的读取语法

cl-assertion-failed

提示信息为 ‘Assertion failed’。cl-assert 宏测试不通过时触发。See Assertions in Common Lisp Extensions

coding-system-error

提示信息为 ‘Invalid coding system’。See Lisp中的编码系统

cyclic-function-indirection

提示信息为 ‘Symbol's chain of function indirections contains a loop’。See 符号函数间接引用

cyclic-variable-indirection

提示信息为 ‘Symbol's chain of variable indirections contains a loop’。See 变量别名

dbus-error

提示信息为 ‘D-Bus error’。See Errors and Events in D-Bus integration in Emacs

end-of-buffer

提示信息为 ‘End of buffer’。See 按字符移动

end-of-file

提示信息为 ‘End of file during parsing’。注意该错误不属于 file-error 子类别,因为它与 Lisp 读取器相关,而非文件 I/O。See 输入函数

file-already-exists

属于 file-error 子类别。See 写入文件

permission-denied

属于 file-error 子类别,当操作系统因某种原因不允许 Emacs 访问文件或目录时触发。

file-date-error

属于 file-error 子类别。copy-file 尝试设置输出文件的最后修改时间失败时触发。See 修改文件名与属性

file-error

此处不列出该错误及其子类别的错误字符串,因为当存在错误条件 file-error 时,提示信息通常仅由数据项构造而成,因此错误字符串并不重要。不过这些错误符号确实带有 error-message 属性,若未提供数据,则会使用 error-message 属性。See 文件

file-missing

属于 file-error 子类别。操作尝试对不存在的文件执行时触发。See 修改文件名与属性

compression-error

属于 file-error 子类别,处理压缩文件出现问题时触发。See 程序的加载方式

file-locked

属于 file-error 子类别。See 文件锁

file-supersession

属于 file-error 子类别。See 缓冲区修改时间

file-notify-error

属于 file-error 子类别。无法监听文件变更时触发。See 文件变更通知

remote-file-error

属于 file-error 子类别,访问远程文件出现问题时触发。See Remote Files in The GNU Emacs Manual。该错误常出现在计时器、进程过滤器、进程守卫函数或一般特殊事件尝试访问远程文件,且与另一远程文件操作冲突时。通常建议提交错误报告。See Bugs in The GNU Emacs Manual

ftp-error

属于 remote-file-error 子类别,通过 ftp 访问远程文件出现问题时触发。See Remote Files in The GNU Emacs Manual

invalid-function

提示信息为 ‘Invalid function’。See 符号函数间接引用

invalid-read-syntax

提示信息通常为 ‘Invalid read syntax’。See 打印表示与读入语法。该错误也可能由 eval-expression 等命令在表达式后存在多余文本时触发,此时提示信息为 ‘Trailing garbage following expression’。

invalid-regexp

提示信息为 ‘Invalid regexp’。See 正则表达式

mark-inactive

提示信息为 ‘The mark is not active now’。See 标记点

no-catch

提示信息为 ‘No catch for tag’。See 显式非局部退出:catchthrow

range-error

提示信息为 Arithmetic range error

overflow-error

提示信息为 ‘Arithmetic overflow error’。属于 range-error 子类别。 整数超出 integer-width 限制时可能触发。See 整数基础

scan-error

提示信息为 ‘Scan error’。某些语法解析函数发现无效语法或不匹配的括号时触发。按惯例触发时携带三个参数:人类可读的错误信息、无法越过的障碍起始位置、障碍结束位置。See 移动遍历平衡表达式,另见 表达式解析

search-failed

提示信息为 ‘Search failed’。See 搜索与匹配

setting-constant

提示信息为 ‘Attempt to set a constant symbol’。尝试对 niltmost-positive-fixnummost-negative-fixnum 以及关键字符号赋值时触发。也会在尝试对 enable-multibyte-characters 及其他因某种原因不允许直接赋值的符号赋值时触发。See 永不改变的变量

text-read-only

提示信息为 ‘Text is read-only’。属于 buffer-read-only 子类别。See 具有特殊含义的文本属性

undefined-color

提示信息为 ‘Undefined color’。See 颜色名称

user-error

提示信息为空字符串。See 如何发出错误信号

user-search-failed

与 ‘search-failed’ 类似,但不会触发调试器,行为同 ‘user-error’。See 如何发出错误信号,另见 搜索与匹配。用于 Info 文件内搜索,参见 Search Text in Info

void-function

提示信息为 ‘Symbol's function definition is void’。See 访问函数单元内容

void-variable

提示信息为 ‘Symbol's value as variable is void’。See 访问变量值

wrong-number-of-arguments

提示信息为 ‘Wrong number of arguments’。See 参数列表的特性

wrong-type-argument

提示信息为 ‘Wrong type argument’。See 类型谓词

unknown-image-type

提示信息为 ‘Cannot determine image type’。See 图像

inhibited-interaction

提示信息为 ‘User interaction while inhibited’。当 inhibit-interactionnil 时调用用户交互函数(如 read-from-minibuffer)会触发该错误。