Spec-Zone.ru › Elixir 1.17

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

Функции для работы с throw/catch/exit и исключениями.

Этот модуль также определяет поведение, необходимое для пользовательских исключений. Чтобы определить своё, см. defexception/1.

Функции форматирования

Несколько функций в этом модуле помогают форматировать исключения. Некоторые из этих функций ожидают стек вызовов в качестве аргумента. Стек вызовов обычно доступен внутри catch и rescue с помощью переменной __STACKTRACE__/0.

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

Краткое описание

Типы

arity_or_args()
kind()

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

location()
non_error_kind()
stacktrace()
stacktrace_entry()
t()

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

Обработчики

blame(t, stacktrace)

Вызывается из Exception.blame/3 для дополнения структуры исключения.

exception(term)

Получает аргументы, переданные raise/2, и возвращает структуру исключения.

message(t)

Получает структуру исключения и должна вернуть её сообщение.

Функции

blame(kind, error, stacktrace)

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

blame_mfa(module, function, args)

Присваивает вину вызову заданного модуля, функции и аргументов.

format(kind, payload, stacktrace \\ [])

Нормализует и форматирует throw/ошибки/выходы и стеки вызовов.

format_banner(kind, exception, stacktrace \\ [])

Нормализует и форматирует любой throw/ошибку/выход.

format_exit(reason)

Форматирует выход. Возвращает строку.

format_fa(fun, arity)

Получает анонимную функцию и арность и форматирует её так, как показано в стеках вызовов. Арность также может быть списком аргументов.

format_file_line(file, line, suffix \\ "")

Форматирует заданный file и line так, как показано в стеках вызовов.

format_file_line_column(file, line, column, suffix \\ "")

Форматирует заданный file, line, и column так, как показано в стеках вызовов.

format_mfa(module, fun, arity)

Получает модуль, функцию и арность и форматирует их так, как показано в стеках вызовов. Арность также может быть списком аргументов.

format_stacktrace(trace \\ nil)

Форматирует стек вызовов.

format_stacktrace_entry(entry)

Получает запись стека вызовов и форматирует её в строку.

message(exception)

Получает сообщение для exception.

normalize(kind, payload, stacktrace \\ [])

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

Типы

arity_or_args()Source

@type arity_or_args() :: non_neg_integer() | list()

kind()Source

@type kind() :: :error | non_error_kind()

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

location()Source

@type location() :: keyword()

non_error_kind()Source

@type non_error_kind() :: :exit | :throw | {:EXIT, pid()}

stacktrace()Source

@type stacktrace() :: [stacktrace_entry()]

stacktrace_entry()Source

@type stacktrace_entry() ::
  {module(), atom(), arity_or_args(), location()}
  | {(... -> any()), arity_or_args(), location()}

t()Source

@type t() :: %{
  :__struct__ => module(),
  :__exception__ => true,
  optional(atom()) => any()
}

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

Обработчики

blame(t, stacktrace)Source

@callback blame(t(), stacktrace()) :: {t(), stacktrace()}

Вызывается из Exception.blame/3 для дополнения структуры исключения.

Можно использовать для сбора дополнительной информации об исключении или для выполнения дополнительных дорогостоящих вычислений.

exception(term)Source

@callback exception(term()) :: t()

Получает аргументы, переданные raise/2, и возвращает структуру исключения.

По умолчанию реализация принимает либо набор ключевых аргументов, которые объединяются в структуру, либо строку, которая будет использоваться в качестве сообщения исключения.

message(t)Source

@callback message(t()) :: String.t()

Получает структуру исключения и должна вернуть её сообщение.

Чаще всего исключения имеют поле сообщения, к которому по умолчанию обращается эта функция. Однако, если исключение не имеет поля сообщения, эта функция должна быть явно реализована.

Функции

blame(kind, error, stacktrace)Source

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

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

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

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

blame_mfa(module, function, args)Source

@spec blame_mfa(module(), function :: atom(), 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.

format(kind, payload, stacktrace \\ [])Source

@spec format(kind(), any(), stacktrace()) :: String.t()

Нормализует и форматирует броски/ошибки/выходы и стековые следы.

Она полагается на format_banner/3 и format_stacktrace/1 для генерации окончательного формата.

Если kind это {:EXIT, pid}, она не генерирует стековый след, так как такие выходы извлекаются как сообщения без стековых следов.

format_banner(kind, exception, stacktrace \\ [])Source

@spec format_banner(kind(), any(), stacktrace()) :: String.t()

Нормализует и форматирует любые броски/ошибки/выходы.

Сообщение форматируется и отображается в том же формате, что и в CLI Elixir.

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

format_exit(reason)Source

@spec format_exit(any()) :: String.t()

Форматирует выход. Возвращает строку.

Часто внутри выходов есть ошибки/исключения. Выходы часто оборачиваются вызывающим элементом и содержат стековые следы. Эта функция форматирует выходы таким образом, чтобы красиво отобразить причину выхода, вызывающий элемент и стековый след.

format_fa(fun, arity)Source

@spec format_fa((... -> any()), arity()) :: String.t()

Получает анонимную функцию и арность и форматирует её, как показано в стековых следах. Арность также может быть списком аргументов.

Примеры

Exception.format_fa(fn -> nil end, 1)
#=> "#Function<...>/1"

format_file_line(file, line, suffix \\ "")Source

@spec format_file_line(String.t() | nil, non_neg_integer() | nil, String.t()) ::
  String.t()

Форматирует заданный 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_file_line_column(file, line, column, suffix \\ "")Source

@spec format_file_line_column(
  String.t() | nil,
  non_neg_integer() | nil,
  non_neg_integer() | nil,
  String.t()
) :: String.t()

Форматирует заданные file, line и column в формате стековых следов.

Если какие-либо значения являются nil, они опускаются.

Примеры

iex> Exception.format_file_line_column("foo", 1, 2)
"foo:1:2:"

iex> Exception.format_file_line_column("foo", 1, nil)
"foo:1:"

iex> Exception.format_file_line_column("foo", nil, nil)
"foo:"

iex> Exception.format_file_line_column("foo", nil, 2)
"foo:"

iex> Exception.format_file_line_column(nil, nil, nil)
""

format_mfa(module, fun, arity)Source

@spec format_mfa(module(), atom(), arity_or_args()) :: String.t()

Получает модуль, функцию и арность и форматирует их, как показано в стековых следах. Арность также может быть списком аргументов.

Примеры

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 — имя функции-контейнера. Преобразовать в "анонимный fn в func/arity"

format_stacktrace(trace \\ nil)Source

@spec format_stacktrace(stacktrace() | nil) :: String.t()

Форматирует стековый след.

Стековый след должен быть передан в качестве аргумента. В противном случае стековый след извлекается из Process.info/2.

format_stacktrace_entry(entry)Source

@spec format_stacktrace_entry(stacktrace_entry()) :: String.t()

Получает запись стекового следа и форматирует её в строку.

message(exception)Source

@spec message(t()) :: String.t()

Получает сообщение для exception.

normalize(kind, payload, stacktrace \\ [])Source

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

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

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

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

Скачать версию ePub

Создано с помощью ExDoc (v0.34.1) для языка программирования Elixir

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.17.2/Exception.html

Spec-Zone.ru

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