非常教程

Erlang 20参考手册

指南:参考手册 | Guide: Reference manual

11.错误和错误处理 | 11. Errors and Error Handling

11.1术语

错误大致可分为四种不同的类型:

  • 编译时错误
  • 逻辑错误
  • 运行时错误
  • 产生的误差

编译时错误,例如语法错误,并不会引起太多麻烦,因为它被编译器捕获。

逻辑错误是程序不按预期运行,但不会崩溃。一个例子是,当图形用户界面中的按钮被点击时没有任何反应。

运行时错误是发生崩溃时。一个例子是当一个运算符被应用于错误类型的参数。Erlang编程语言具有处理运行时错误的内置功能。

运行时错误也可以通过调用erlang:error(Reason)或模拟erlang:error(Reason, Args)

运行时错误是类的异常的另一个名称error

生成的错误是代码本身调用exit/1throw/1。请注意,仿真的运行时错误在此处不表示为生成的错误。

生成的错误是类exit和异常的例外throw

当在Erlang中发生运行时错误或生成的错误时,停止执行评估错误表达式的进程。这被称为失败,执行或评估失败,或进程失败终止退出。注意一个进程可以因为除了失败之外的其他原因而终止/退出。

终止进程发出退出信号,其退出原因说明发生了哪些错误。通常,有关错误的一些信息被打印到终端。

11.2例外

例外是运行时错误或生成的错误,并且具有三个不同的类,具有不同的来源。所述try表达可以不同类别之间进行区分,而catch表达不能。他们被描述在Expressions

起源

error

运行时错误,例如1 + a,或者称为erlang的进程:error / 1,2

exit

该过程称为exit / 1

throw

这个过程叫做throw / 1

一个异常包括它的类,一个退出原因(参见Exit Reason)和一个堆栈跟踪(它有助于查找异常的代码位置)。

栈跟踪可用来检索erlang:get_stacktrace/0从内try表达,并且返回类的例外errorcatch表达。

类的异常error也称为运行时错误。

11.3处理Erlang中的运行时错误

进程中的错误处理

它可以防止运行时错误和其他异常,以免进程通过使用终止catchtryExpressionscatchtry

进程间的错误处理

进程可以监视其他进程并检测进程终止,请参阅Processes

11.4退出原因

发生运行时错误时,这是​​类的例外error。退出原因是一个元组{Reason,Stack},其中Reason是表示错误类型的术语:

原因

错误类型

Bdrg

错误的论据。参数是错误的数据类型,或者是其他形式不正确。

Bdrith

算术表达式中的错误参数。

{badmatch,V}

对匹配表达式的评估失败。值V不匹配。

function_clause

评估函数调用时没有找到匹配的函数子句。

{case_clause,V}

评估案例表达式时未找到匹配的分支。值V不匹配。

if_clause

评估if表达式时未找到真正的分支。

{try_clause,V}

评估try表达式的部分时没有找到匹配的分支。值V不匹配。

民主基金

评估函数调用时无法找到函数。

{badfun,F}

有趣的F有些问题

{badarity,F}

有趣的是适用于错误数量的参数。F描述了乐趣和论据。

timeout_value

receive..after表达式中的超时值被计算为除了整数或无穷大以外的其他值。

noproc

试图链接到一个不存在的过程。

{nocatch,V}

试图评估一个抛出一个捕获。V是抛出的术语。

system_limit

已达到系统限制。有关系统限制的信息,请参见效率指南。

Stack是发生错误时正在评估的函数调用的堆栈,作为{Module,Name,Arity}最先调用最近函数的元组列表给出。最近的函数调用元组在某些情况下可以是{Module,Name,[Arg]}

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1