期望值 | 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: varblame(: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.tformat_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: varnormalize(:error, any, stacktrace) :: t规范化异常,将Erlang异常转换为Elixir异常。
它将kind溢出catch的参数作为参数并仅对其进行标准化:error,将未触及的有效负载返回给其他人。
第三个参数stacktrace是可选的。如果没有提供,System.stacktrace/0有时会用于获取更多信息kind :error。如果堆栈跟踪未知并且System.stacktrace/0不会返回与该异常相对应的堆栈跟踪[],则必须使用空的堆栈跟踪。
Callbacks
exception(term)
message(t) :: String.tmessage(t)
message(t) :: String.t本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

