Spec-Zone.ru › Elixir 1.3

Исключение поведение

Функции для форматирования выбрасываемых/перехватываемых/выходных и исключений.

Обратите внимание, что трассировки стека в 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

Spec-Zone.ru

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