Spec-Zone.ru › Elixir 1.7

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

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

Обратите внимание, что трассировки стека в Elixir доступны только внутри catch и rescue с помощью переменной __STACKTRACE__/0.

Не полагайтесь на конкретный формат, возвращаемый функциями format* в этом модуле. Он может быть изменён в будущих версиях для лучшей интеграции с инструментами Elixir. Другими словами, используя функции в этом модуле, гарантируется, что исключения будут форматироваться так же, как и в текущей версии Elixir.

Обзор

Типы

kind()

Тип, обрабатываемый функциями форматирования

stacktrace()
stacktrace_entry()
t()

Тип исключения

Функции

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 для дополнения структуры исключения

exception(term)
message(t)

Типы

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) (since 1.5.0)

blame(non_error_kind(), payload, stacktrace()) :: {payload, stacktrace()}
when payload: var
blame(:error, any(), stacktrace()) :: {t(), stacktrace()}

Прикрепляет информацию к исключениям для дополнительной отладки.

Эта операция потенциально ресурсоёмкая, так как она считывает данные из файловой системы, парсит файлы beam, вычисляет код и так далее.

Если модуль исключения реализует необязательный обратный вызов blame/2, он будет вызван для выполнения вычислений.

blame_mfa(module, function, args) (since 1.5.0)

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. Обратите внимание, что эта функциональность требует Erlang/OTP 20, в противном случае :error всегда возвращается.

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/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 \\ [])

normalize(non_error_kind(), payload, stacktrace()) :: payload when payload: var
normalize(:error, any(), stacktrace()) :: t()

Нормализует исключение, преобразуя Erlang исключения в Elixir исключения.

Она принимает kind, пролитые catch, как аргумент и нормализует только :error, возвращая неизменённый payload для других.

Третий аргумент — трассировка стека, используемая для обогащения нормализованной ошибки дополнительной информацией. Она используется только в случае, если тип — ошибка.

Обработчики событий

blame(t, stacktrace) (optional)

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.7.4/Exception.html

Spec-Zone.ru

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