Пользовательские типы ошибок
Объекты ошибок могут быть созданы двумя способами: с помощью box.error.new()
и с помощью box.error()
.
Оба метода принимают аргументы либо в виде перечисления (code, reason, <reason string args>
):
box.error(9, 'my_space', 'reason') -- error: 'Failed to create space my_space: reason'
…либо в виде Lua-таблицы ({code = code, reason = reason, ...}
):
box.error({code = 9, reason = 'Failed to create space my_space: reason'})
Также можно определить свой собственный тип ошибок вместо встроенных. Для этого поместите строку со своим типом в поле type
, если вы передаете аргументы в виде таблицы, или вместо параметра code
при перечислении:
box.error('MyErrorType', 'Message')
box.error({type = 'MyErrorType', code = 1024, reason = 'Message'})
Или вариант без выдачи ошибки:
box.error.new('MyErrorType', 'Message')
box.error.new({type = 'MyErrorType', code = 1024, reason = 'Message'})
При указании пользовательского типа он отображается в атрибуте err.type
. Когда он не указан, err.type
показывает одну из встроенных ошибок, таких как 'ClientError'
, 'OurOfMemory'
и др.
Ограничение по длине имени для пользовательского типа составляет 63 байта. Все, что длиннее этого ограничения, отсекается.
Исходный тип ошибки можно проверить, используя член err.base_type
, хотя, как правило, его не следует использовать. Для пользовательских типов базовым типом является 'CustomError'
.
Пример:
tarantool> e = box.error.new({type = 'MyErrorType', code = 1024, reason = 'Message'})
---
...
tarantool> e:unpack()
---
- code: 1024
trace:
- file: '[string "e = box.error.new({type = ''MyErrorType'', code..."]'
line: 1
type: MyErrorType
custom_type: MyErrorType
message: Message
base_type: CustomError
...
Since version 2.4.2,
you can also use a format string to compose an error message for
the 'CustomError'
type:
box.error('MyCustomType', 'The error reason: %s', 'some error reason')