erlang运行时错误

Erlang中的运行时错误包括:badarg, badarith, badmatch, function_clause, case_clause, if_clause, undef, noproc, system_limit等。其中function_clause, case_clause, if_clause,badmatch是最常见的错误。

1. badarg

参数类型错误,传入参数和函数要求参数不匹配。如把atom作为参数传给erlang:integer_to_list/1

2. badarith

算实运算错误,如一个整数和atom相加

3. {badmatch,V}

模式匹配错误,最常见的例子是给一个变量赋不同的值。

4. function_clause

函数已定义,但找不到匹配函数。如下面的函数test:add/2接收两个整数,并返回它们的和。如果传入小数,将找不到匹配的分支,抛出function_clause。

5. {case_clause,V}

case表达式找不到匹配的分支。

可以把”_”加到case的最后分支中,避免出现case_clause。

6. if_clause

if 表达式要求最少有一个分支测试条件的结果为true,否则会引发错误。下面表达将会引发if_clause

在分支最后加入ture,可以避免if_clause

7. undef
调用未定义的函数或模块,如:

 8.noproc
进程不存在,如gen_server call一个不存在的进程:

9.system_limit

超出系统上限,如atom,ets,port,process等。下面为atom超出上限例子(注意:会使虚拟机退出):

异常处理
在开发中可使用try,catch捕获异常,同时也调用erlang:get_stacktrace(),获取栈信息,定位错误。

一个简单的例子:

参考网址:
http://www.erlang.org/doc/reference_manual/errors.html
http://www.erlang.org/doc/reference_manual/expressions.html

Erlang技术分享内容均为原创,转载请标明本文地址
本文链接:http://www.kongqingquan.com/archives/389

此条目发表在Erlang分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">