Top.Mail.Ru
Пользовательские типы ошибок | Tarantool
 

Версия:

Пользовательские типы ошибок

Пользовательские типы ошибок

Объекты ошибок могут быть созданы двумя способами: с помощью 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')