Как сигнализировать об ошибке
Сигнализация об ошибке означает начало обработки ошибки. Обработка ошибок обычно прерывает часть или все выполняемое приложение и возвращается к точке, настроенной на обработку ошибки (см. Обработка ошибок). Здесь описано, как сигнализировать об ошибке.
Большинство ошибок сигнализируются автоматически в примитивах Lisp, которые вы вызываете для других целей, например, если вы пытаетесь взять CAR целого числа или переместиться вперед на символ в конце буфера. Вы также можете явно сигнализировать об ошибках с помощью функций error и signal.
Выход, который происходит, когда пользователь набирает C-g, не считается ошибкой, но обрабатывается почти как ошибка. См. Выход.
Каждая ошибка каким-то образом указывает сообщение об ошибке. Сообщение должно указывать, что не так («Файл не существует»), а не как должны быть вещи («Файл должен существовать»). Конвенция в Emacs Lisp заключается в том, что сообщения об ошибках должны начинаться с заглавной буквы, но не должны заканчиваться какой-либо пунктуацией.
- Функция: error format-string &rest args
-
Эта функция сигнализирует об ошибке с сообщением об ошибке, построенным путем применения
format-message(см. Форматирование строк) к format-string и args.Эти примеры показывают типичное использование
error:(error "That is an error -- try something else") error→ That is an error -- try something else(error "Invalid name `%s'" "A%%B") error→ Invalid name ‘A%%B’errorработает, вызываяsignalс двумя аргументами: символом ошибкиerror, и списком, содержащим строку, возвращеннуюformat-message.Обычно тяжелая кавычка и апостроф в формате преобразуются в соответствующие фигурные кавычки, например, "Missing `%s'" может привести к "Missing ‘foo’". См. Стиль цитирования текста, чтобы узнать, как повлиять на это преобразование или подавить его.
Предупреждение: Если вы хотите использовать собственную строку в качестве сообщения об ошибке дословно, не просто пишите
(error string). Если string string содержит ‘%’, ‘`’, или ‘'’ она может быть переформатирована с нежелательными результатами. Вместо этого используйте(error "%s" string).
- Функция: signal error-symbol data
-
Эта функция сигнализирует об ошибке, имя которой указано в error-symbol. Аргумент data представляет собой список дополнительных объектов Lisp, относящихся к обстоятельствам ошибки.
Аргумент error-symbol должен быть символом ошибки — символом, определенным с помощью
define-error. Так Emacs Lisp классифицирует различные типы ошибок. См. Символы ошибок, для описания символов ошибок, условий ошибок и имен условий.Если ошибка не обрабатывается, два аргумента используются для вывода сообщения об ошибке. Обычно это сообщение об ошибке предоставляет свойство
error-messageсимвола error-symbol. Если data не-nil, за этим следует двоеточие и список, разделенный запятыми, невычисленных элементов data. Дляerror, сообщение об ошибке — это CAR из data (который должен быть строкой). Подкатегорииfile-errorобрабатываются специально.Количество и значение объектов в data зависят от error-symbol. Например, при ошибке
wrong-type-argumentв списке должно быть два объекта: предикат, описывающий ожидаемый тип, и объект, который не соответствовал этому типу.И error-symbol, и data доступны для любых обработчиков ошибок, обрабатывающих ошибку:
condition-caseсвязывает локальную переменную со списком вида(error-symbol . data)(см. Обработка ошибок).Функция
signalникогда не возвращается.(signal 'wrong-number-of-arguments '(x y)) error→ Wrong number of arguments: x, y(signal 'no-such-error '("My unknown error condition")) error→ peculiar error: "My unknown error condition"
- Функция: user-error format-string &rest args
Эта функция ведет себя точно так же, как
error, за исключением того, что она использует символ ошибкиuser-errorвместоerror. Как следует из названия, она предназначена для сообщения об ошибках со стороны пользователя, а не об ошибках в самом коде. Например, если вы попытаетесь использовать командуInfo-history-back(l) для перемещения назад за начало истории просмотра Info, Emacs сигнализирует об ошибкеuser-error. Такие ошибки не приводят к входу в отладчик, даже когдаdebug-on-errorне-nil. См. Отладка ошибок.
Примечание Common Lisp: Emacs Lisp не имеет ничего подобного концепции Common Lisp по поводу продолжаемых ошибок.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Signaling-Errors.html