Erlang - 异常处理

Erlang - 异常处理 首页 / Erlang入门教程 / Erlang - 异常处理

任何编程语言都需要异常处理来处理运行时错误,以便可以维护应用程序的正常流程。

通常,当Erlang中发生异常或错误时,将显示以下消息。

{"init terminating in do_boot", {undef,[{helloLearnfk,start,[],[]}, 
{init,start_it,1,[]},{init,start_em,1,[]}]}}

故障转储将被写入-

erl_crash.dump
init terminating in do_boot ()

在Erlang中,有3种异常类型-

  • Error    -  调用 erlang:error(Reason)将结束当前进程的执行,并包括最后一个函数的堆栈跟踪以及其参数。

  • Exists   -  "internal"和"external",internal退出通过调用函数 exit/1 触发,并使当前进程停止执行。external使用 exit/2 调用,并且与Erlang并发方面的多个进程有关。

  • Throw  -  抛出是一类异常,用于可以期望程序员处理的情况。

try catch表达式的一般语法如下。

try Expression of 
SuccessfulPattern1 [Guards] -> 
Expression1; 
SuccessfulPattern2 [Guards] -> 
Expression2 

catch 
TypeOfError:ExceptionPattern1 -> 
Expression3; 
TypeOfError:ExceptionPattern2 -> 
Expression4 
end

在 try和of 之间的表达式被认为是保护,这意味着该调用中发生的任何异常都将被捕获, try和catch 之间的模式和表达式的行为与 case ... of 完全相同。

以下是Erlang中的一些错误和错误原因-

错误错误类型
badarg错误的论点。该参数的数据类型错误,或格式错误。
badarith算术表达式中的错误参数。
{badmatch,V}匹配表达式的计算失败。值V不匹配。
function_clause判断函数调用时找不到匹配的函数子句。
{case_clause,V}在计算case表达式时找不到匹配的分支。值V不匹配。
if_clause在判断if表达式时找不到真正的分支。
{try_clause,V}在判断try表达式的of-section时,找不到匹配的分支。值V不匹配。
undef判断函数调用时找不到该函数。
{badfun,F}有趣的F出了点问题
{badarity,F}错误的参数数量会带来乐趣。 F描述了乐趣和参数。
timeout_value receive..after表达式中的超时值被计算为非整数或无穷大。
noproc尝试链接到不存在的进程。

-
module(helloLearnfk). -compile(export_all). generate_exception(1) -> a; generate_exception(2) -> throw(a); generate_exception(3) -> exit(a); generate_exception(4) -> {'EXIT', a}; generate_exception(5) -> erlang:error(a). demo1() -> [catcher(I) || I <- [1,2,3,4,5]]. catcher(N) -> try generate_exception(N) of Val -> {N, normal, Val} catch throw:X -> {N, caught, thrown, X}; exit:X -> {N, caught, exited, X}; error:X -> {N, caught, error, X} end. demo2() -> [{I, (catch generate_exception(I))} || I <- [1,2,3,4,5]]. demo3() -> try generate_exception(5) catch error:X -> {X, erlang:get_stacktrace()} end. lookup(N) -> case(N) of 1 -> {'EXIT', a}; 2 -> exit(a) end.

如果我们以helloLearnfk:demo()的身份运行程序。 我们将获得以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/erlang/erlang-exceptions.html

来源:LearnFk无涯教程网

[{1,normal,a},
{2,caught,thrown,a},
{3,caught,exited,a},
{4,normal,{'EXIT',a}},
{5,caught,error,a}]

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

微服务架构核心20讲 -〔杨波〕

技术领导力实战笔记 -〔TGO鲲鹏会〕

JavaScript核心原理解析 -〔周爱民〕

职场求生攻略 -〔臧萌〕

MySQL 必知必会 -〔朱晓峰〕

Web漏洞挖掘实战 -〔王昊天〕

林外 · 专利写作第一课 -〔林外〕

技术领导力实战笔记 2022 -〔TGO 鲲鹏会〕

徐昊 · AI 时代的软件工程 -〔徐昊〕

好记忆不如烂笔头。留下您的足迹吧 :)