当 Emacs Lisp 试图对某个因某种原因无法被求值的形式进行求值时,它会 发出(signal) 一个 错误(error)。
当错误被发出时,Emacs 的默认处理方式是:打印错误信息,并终止当前命令的执行。在大多数情况下这都是正确的行为,例如你在缓冲区末尾按下 C-f 时。
在复杂的程序中,简单地终止执行往往不是你想要的结果。例如,程序可能已经对数据结构做了临时修改,或是创建了临时缓冲区,这些都需要在程序结束前清理掉。这时,你可以使用 unwind-protect 来设置 清理表达式(cleanup expressions),以便在发生错误时执行。(See 非局部退出的清理工作。)偶尔,你可能希望即使子程序出错,程序仍能继续运行。在这些情况下,可以使用 condition-case 来设置 错误处理函数(error handlers),以便在出错时重新获得程序控制权。
如果你只想报告问题,而不终止当前命令的执行,可以考虑发出一条警告。See Reporting Warnings。
请不要使用错误处理机制来在程序的不同部分之间转移控制;这种场景应当使用 catch 和 throw。See 显式非局部退出:catch 和 throw。