Исключение поведение
Функции для форматирования выбрасываемых/перехватываемых/выходных и исключений.
Обратите внимание, что трассировки стека в Elixir обновляются при выбрасывании, ошибках и выходах. Например, в любой момент System.stacktrace/0 вернёт трассировку стека для последнего выбрасывания/ошибки/выхода, произошедшего в текущем процессе.
Не полагайтесь на конкретный формат, возвращаемый функциями format в этом модуле. Они могут быть изменены в будущих выпусках для лучшей поддержки инструментальной цепочки Elixir. Другими словами, используя функции в этом модуле, гарантируется, что исключения будут отформатированы так же, как в текущей версии Elixir.
Краткое описание
Типы
- kind()
-
Тип обрабатываемый функциями форматирования
- stacktrace()
- stacktrace_entry()
- t()
-
Тип исключения
Функции
- exception?(term)
-
Возвращает
true, если заданныйtermявляется исключением - format(kind, payload, stacktrace \\ nil)
-
Нормализует и форматирует выбрасывания/ошибки/выходы и трассировки стека
- format_banner(kind, exception, stacktrace \\ nil)
-
Нормализует и форматирует любое выбрасывание/ошибку/выход
- 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 \\ nil)
-
Нормализует исключение, преобразуя Erlang исключения в Elixir исключения
Обработчики событий
- exception(term)
- message(t)
Типы
kind()
kind() :: :error | :exit | :throw | {:EXIT, pid} Тип обрабатываемый функциями форматирования
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} Тип исключения
Функции
exception?(term)
Возвращает true, если заданный term является исключением.
format(kind, payload, stacktrace \\ nil)
format(kind, any, stacktrace | nil) :: String.t
Нормализует и форматирует выбрасывания/ошибки/выходы и трассировки стека.
Опирается на format_banner/3 и format_stacktrace/1 для генерации окончательного формата.
Обратите внимание, что {:EXIT, pid} не генерируют трассировку стека (поскольку они извлекаются как сообщения без трассировки стека).
format_banner(kind, exception, stacktrace \\ nil)
format_banner(kind, any, stacktrace | nil) :: String.t
Нормализует и форматирует любое выбрасывание/ошибку/выход.
Сообщение форматируется и отображается в том же формате, что и в Elixir CLI.
Третий аргумент, трассировка стека, необязателен. Если он не предоставлен, System.stacktrace/0 иногда используется для получения дополнительной информации для kind :error. Если трассировка стека неизвестна и System.stacktrace/0 не вернёт трассировку стека, соответствующую исключению, должна использоваться пустая трассировка стека, [].
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/arity»
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 \\ nil)
normalize(kind, payload, stacktrace) :: payload when payload: var
normalize(:error, any, stacktrace) :: t
Нормализует исключение, преобразуя Erlang исключения в Elixir исключения.
Принимает kind, выброшенные catch, в качестве аргумента и нормализует только :error, возвращая нетронутый payload для других.
Третий аргумент, трассировка стека, необязателен. Если он не предоставлен, System.stacktrace/0 иногда используется для получения дополнительной информации для kind :error. Если трассировка стека неизвестна и System.stacktrace/0 не вернёт трассировку стека, соответствующую исключению, должна использоваться пустая трассировка стека, [].
Обработчики событий
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.3.4/Exception.html