在线文档教程

期望值 | Exception

异常行为

函数设置抛出/捕获/退出和异常的格式。

请注意,对于抛出、错误和退出,在eldxir中会更新堆栈跟踪。例如,在任何特定的时刻,System.stacktrace/0将返回当前进程中发生的上次抛出/错误/退出的堆栈跟踪。

不依赖于format*本模块的功能。为了更好地适应Elixir的工具链,它们可能在将来的版本中被更改。换句话说,通过使用本模块中的函数,可以保证您将设置异常格式,就像当前使用的Elixir版本一样。

摘要

类型

kind()

由格式化函数处理的类型。

stacktrace()stacktrace_entry()t()

异常类型

功能

blame(kind, error, stacktrace)

将信息附加到例外以进行额外的调试

blame_mfa(module, function, args)

将错误归咎于调用给定模块、函数和参数

exception?(term)

如果给定term是异常,则返回true

format(kind, payload, stacktrace \ nil)

规范和格式化抛出/错误/退出和堆栈跟踪

format_banner(kind, exception, stacktrace \ nil)

规范化和格式化任何抛出/错误/退出

format_exit(reason)

格式化一个出口。它返回一个字符串。

format_fa(fun, arity)

接收一个匿名函数和参数,并将其格式化为堆栈跟踪所示。元素也可以是一系列参数

format_file_line(file, line, suffix \ "")

格式化给定的fileline如堆栈中所示。如果其中任何一个值是nil,它们被省略了。

format_mfa(module, fun, arity)

接收一个模块,有趣和灵巧,并将其格式化为堆栈跟踪所示。元素也可以是一系列参数

format_stacktrace(trace \ nil)

格式化堆栈跟踪

format_stacktrace_entry(entry)

接收堆栈跟踪条目并将其格式化为一个字符串

message(exception)

获取消息 exception

normalize(kind, payload, stacktrace \ nil)

使异常正常化,将Erlang异常转换为elxir异常。

回调

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)

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

blame(:error, any, stacktrace) :: {t, stacktrace}

将信息附加到异常以进行额外的调试。

这个操作可能很昂贵,因为它从文件系统读取数据,解析束文件,评估代码等等。目前可能会注释以下例外情况:

  • FunctionClauseError - 用通话中使用的参数和可用的子句进行注释

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。注意这个功能需要Erlang / OTP 20,否则:error总是返回。

exception?(term)

如果给定term是异常,则返回true

format(kind, payload, stacktrace \ nil)

format(kind, any, stacktrace | nil) :: String.t

规范和格式化抛出/错误/退出和堆栈跟踪。

它依赖于format_banner/3format_stacktrace/1生成最终的格式。

请注意,{:EXIT, pid}不要生成堆栈跟踪(因为它们是作为没有堆栈跟踪的消息来检索的)。

format_banner(kind, exception, stacktrace \ nil)

format_banner(kind, any, stacktrace | nil) :: String.t

规范化和格式化任何抛出/错误/退出。

信息格式化并以Elixir CLI使用的相同格式显示。

第三个参数stacktrace是可选的。如果没有提供,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 \ "")

iex> Exception.format_file_line("foo", 1) "foo:1:" iex> Exception.format_file_line("foo", nil) "foo:" iex> Exception.format_file_line(nil, 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)

格式化堆栈跟踪。

format_stacktrace_entry(stacktrace_entry) :: String.t

format_stacktrace_entry(entry)

format_stacktrace_entry(stacktrace_entry) :: String.t

接收堆栈跟踪条目并将其格式化为一个字符串。

message(exception)

获取消息exception

normalize(kind, payload, stacktrace \ nil)

normalize(non_error_kind, payload, stacktrace) :: payload when payload: var

normalize(:error, any, stacktrace) :: t

规范化异常,将Erlang异常转换为Elixir异常。

它将kind溢出catch的参数作为参数并仅对其进行标准化:error,将未触及的有效负载返回给其他人。

第三个参数stacktrace是可选的。如果没有提供,System.stacktrace/0有时会用于获取更多信息kind :error。如果堆栈跟踪未知并且System.stacktrace/0不会返回与该异常相对应的堆栈跟踪[],则必须使用空的堆栈跟踪。

Callbacks

exception(term)

message(t) :: String.t

message(t)

message(t) :: String.t