Spec-Zone.ru › Elisp

Как сигнализировать об ошибке

Сигнализация об ошибке означает начало обработки ошибки. Обработка ошибок обычно прерывает часть или все выполняемое приложение и возвращается к точке, настроенной на обработку ошибки (см. Обработка ошибок). Здесь описано, как сигнализировать об ошибке.

Большинство ошибок сигнализируются автоматически в примитивах 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API