期望值 | 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 \ "")
格式化给定的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异常转换为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/3
并format_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