Исключение поведение
Функции для форматирования бросков/перехватов/выходов и исключений.
Обратите внимание, что трассировки стека в Elixir доступны только внутри блока catch и rescue с использованием переменной __STACKTRACE__/0.
Не полагайтесь на конкретный формат, возвращаемый функциями модуля format*. Они могут быть изменены в будущих версиях для лучшей адаптации к инструменту Elixir. Другими словами, используя функции этого модуля, гарантируется, что вы будете форматировать исключения так же, как и в текущей версии Elixir.
Краткое описание
Типы
Функции
- blame(kind, error, stacktrace)
Прикрепляет информацию к исключениям для дополнительной отладки.
- blame_mfa(module, function, args)
Обвиняет вызов данного модуля, функции и аргументов.
- exception?(term)
Возвращает
true, если данныйtermявляется исключением.- format(kind, payload, stacktrace \\ [])
Нормализует и форматирует броски/ошибки/выходы и трассировки стека.
- format_banner(kind, exception, stacktrace \\ [])
Нормализует и форматирует любой бросок/ошибку/выход.
- format_exit(reason)
Форматирует выход. Возвращает строку.
- format_fa(fun, arity)
Принимает анонимную функцию и арность и форматирует её так, как показано в трассировках стека. Арность также может быть списком аргументов.
- format_file_line(file, line, suffix \\ "")
Форматирует данный
fileиlineтак, как показано в трассировках стека. Если любое из значенийnil, они опускаются.- format_mfa(module, fun, arity)
Принимает модуль, функцию и арность и форматирует её так, как показано в трассировках стека. Арность также может быть списком аргументов.
- format_stacktrace(trace \\ nil)
Форматирует трассировку стека.
- format_stacktrace_entry(entry)
Принимает запись трассировки стека и форматирует её в строку.
- message(exception)
Получает сообщение для
exception.- normalize(kind, payload, stacktrace \\ [])
Нормализует исключение, преобразуя Erlang-исключения в Elixir-исключения.
Обработчики
- blame(t, stacktrace)
Вызывается из
Exception.blame/3для дополнения структуры исключения.
Типы
kind()
Спецификации
kind() :: :error | non_error_kind()
Тип, обрабатываемый функциями форматирования
stacktrace()
Спецификации
stacktrace() :: [stacktrace_entry()]
stacktrace_entry()
Спецификации
stacktrace_entry() ::
{module(), atom(), arity_or_args(), location()}
| {(... -> any()), arity_or_args(), location()} t()
Спецификации
t() :: %module(){:__exception__ => true, optional(atom()) => any()} Тип исключения
Функции
blame(kind, error, stacktrace)
Характеристики
blame(:error, any(), stacktrace()) :: {t(), stacktrace()} blame(non_error_kind(), payload, stacktrace()) :: {payload, stacktrace()}
when payload: var Присоединяет информацию к исключениям для дополнительной отладки.
Эта операция может быть дорогостоящей, так как она считывает данные из файловой системы, анализирует файлы beam, оценивает код и так далее.
Если модуль исключений реализует необязательный blame/2 обратный вызов, он будет вызван для выполнения вычисления.
blame_mfa(module, function, args)
Характеристики
blame_mfa(module(), function(), args :: [term()]) ::
{:ok, :def | :defp | :defmacro | :defmacrop,
[{args :: [term()], guards :: [term()]}]}
| :error Обвиняет вызов данного модуля, функции и аргументов.
Эта функция извлечёт доступные клаузы из байткода и оценит их по отношению к заданным аргументам. Клаузы возвращаются как список пар {args, guards} , где каждый аргумент и каждое условие верхнего уровня в условии разделены and/or, заключены в кортеж с метаданными об ответственности.
Эта функция возвращает либо {:ok, definition, clauses}, либо :error. Где definition является :def, :defp, :defmacro или :defmacrop.
exception?(term)
Возвращает true , если данный term является исключением.
format(kind, payload, stacktrace \\ [])
Характеристики
format(kind(), any(), stacktrace()) :: String.t()
Нормализует и форматирует броски/ошибки/выходы и трассировки стека.
Он полагается на format_banner/3 и format_stacktrace/1 для генерации окончательного формата.
Если kind является {:EXIT, pid}, он не генерирует трассировку стека, так как такие выходы извлекаются как сообщения без трассировок стека.
format_banner(kind, exception, stacktrace \\ [])
Характеристики
format_banner(kind(), any(), stacktrace()) :: String.t()
Нормализует и форматирует любые броски/ошибки/выходы.
Сообщение форматируется и отображается в том же формате, что и в командной строке Elixir.
Третий аргумент — трассировка стека, используемая для обогащения нормализованной ошибки дополнительной информацией. Он используется только в том случае, если тип — ошибка.
format_exit(reason)
Характеристики
format_exit(any()) :: String.t()
Форматирует выход. Он возвращает строку.
Часто внутри выходов бывают ошибки/исключения. Выходы часто оборачиваются вызывающей стороной и содержат трассировки стека. Эта функция форматирует выходы таким образом, чтобы красиво отобразить причину выхода, вызывающую сторону и трассировку стека.
format_fa(fun, arity)
Принимает анонимную функцию и арность и форматирует её так, как это показано в трассировках стека. Арность также может быть списком аргументов.
Примеры
Exception.format_fa(fn -> nil end, 1) #=> "#Function<...>/1"
format_file_line(file, line, suffix \\ "")
Форматирует заданный file и line , как показано в трассировках стека. Если какие-либо из значений nil, они опускаются.
Примеры
iex> Exception.format_file_line("foo", 1)
"foo:1:"
iex> Exception.format_file_line("foo", nil)
"foo:"
iex> Exception.format_file_line(nil, nil)
"" format_mfa(module, fun, arity)
Принимает модуль, функцию и арность и форматирует их так, как это показано в трассировках стека. Арность также может быть списком аргументов.
Примеры
iex> Exception.format_mfa(Foo, :bar, 1) "Foo.bar/1" iex> Exception.format_mfa(Foo, :bar, []) "Foo.bar()" iex> Exception.format_mfa(nil, :bar, []) "nil.bar()"
Анонимные функции отображаются как -func/arity-anonfn-count-, где func — имя содержащей функции. Преобразуется в "анонимная функция в func/арность"
format_stacktrace(trace \\ nil)
Форматирует трассировку стека.
Трассировка стека должна быть задана в качестве аргумента. Если нет, трассировка стека извлекается из Process.info/2.
format_stacktrace_entry(entry)
Характеристики
format_stacktrace_entry(stacktrace_entry()) :: String.t()
Принимает запись трассировки стека и форматирует её в строку.
message(exception)
Получает сообщение для exception.
normalize(kind, payload, stacktrace \\ [])
Характеристики
normalize(:error, any(), stacktrace()) :: t()
normalize(non_error_kind(), payload, stacktrace()) :: payload when payload: var
Нормализует исключение, преобразуя Erlang-исключения в Elixir-исключения.
Принимает kind , выведенные catch, и нормализует только :error, возвращая неизменённое содержимое для других.
Третий аргумент — трассировка стека, используемая для обогащения нормализованной ошибки дополнительной информацией. Он используется только в том случае, если тип — ошибка.
Обратные вызовы
blame(t, stacktrace)
Характеристики
blame(t(), stacktrace()) :: {t(), stacktrace()} Вызывается из Exception.blame/3 для дополнения структуры исключения.
Можно использовать для сбора дополнительной информации об исключении или для выполнения дополнительных дорогостоящих вычислений.
exception(term)
Характеристики
exception(term()) :: t()
message(t)
Характеристики
message(t()) :: String.t()
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.10.4/Exception.html