Когда Emacs Lisp пытается вычислить форму, которую по какой-то причине невозможно вычислить, он сигнализирует об ошибке.
Когда сигнализируется об ошибке, по умолчанию Emacs выводит сообщение об ошибке и завершает выполнение текущей команды. В большинстве случаев это правильное поведение, например, если вы нажимаете C-f в конце буфера.
В сложных программах простое завершение может быть не тем, что вам нужно.
Например, программа могла внести временные изменения в структуры данных
или создать временные буферы, которые должны быть удалены до завершения
программы. В таких случаях вы бы использовали unwind-protect,
чтобы установить выражения очистки, которые будут
выполнены в случае ошибки. (См. Очистка после нелокальных выходов.)
Иногда вы можете пожелать, чтобы программа продолжила выполнение, несмотря
на ошибку в подпрограмме. В таких случаях вы бы использовали condition-case,
чтобы установить обработчики ошибок для восстановления управления
в случае ошибки.
Для сообщения о проблемах без завершения выполнения текущей команды рассмотрите возможность выдачи предупреждения. См. Сообщение предупреждений.
Сопротивляйтесь соблазну использовать обработку ошибок для передачи
управления от одной части программы к другой; вместо этого используйте
catch и throw. См. Явные нелокальные выходы: catch и throw.