在Erlang编程指南中,提到了Erlang程序在运行是出现的错误,并简单说明了原因,在此记录下,并简单描述下避免错误发生的措施。以供今后查询之用。
1、function_clause
当已存在的函数模式无一匹配该函数时,就是出现该错误。此错误通常发生在两种情况下:1、在分析条件中,遗漏某种匹配模式;2、使用了错误的参数。
factorial(N) when N > 0 ->
N * factorial(N - 1);
factorial(0) -> 1.
1> test:factorial(-1).
** exception error: no function clause matching test:factorial(-1)
2、case_clause
当case结构中没有与现有的模式匹配是就会出现该错误。最常见的原因是忘记一种或多种可能出现的情况。
test1(N) ->
case N of
−1 -> false;
1 -> true
end.
1> test:test1(0).
** exception error: no case clause matching 0 in function test:test1/1
3、if_clause
和case_clause相类似。
上述三种情况,都是因为遗漏或使用错误的参数导致的,避免类似错误情况出现的简单方法有:
1、在函数中,考虑可能出现的其他情况,如在factorial/1中加入
factorial(_Any) ->
……
这样就可以明显地看出错误出现的地方,及时找到出错位置。
4、badmatch
在Erlang程序中,最常用的就是模式的匹配,badmatch这类出错出现的可能性是较大的。错误出现的情况一般是模式匹配失败,但是对于这类错误,原因是多样的。
A、尝试将值赋给已绑定的变量;
B、匹配某函数的返回值。
5、badarg
参数调用错误。调用某函数时,参数使用错误会导致该错误的发生。
如:test(helloworld) ->
……
helloword为原子,并非变量,因此会出错。
6、undef
当调用某定义或者是未导出的函数时会出现该错误。
当在B module中调用A module中的函数时,应该在A module中将该函数export。
7、Badarith
当算术运算时使用了不恰当的参数时会出现该错误。
如整数、浮点数视图除以0时。
在Erlang 中有自带的程序调试工具,但是,在一般情况下,通过对?DEBUG 或者是 io:format()函数使用,可快速找到出现错误的位置。在程序代码中,可善用之。
分享到:
相关推荐
《Erlang程序设计》是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。《Erlang程序设计》将帮助读者在消息...
书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...
本书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发...
Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断的情况下更新。另外如果你需要更高效的话,字节代码也可以编译成本地代码运行。 ...
● 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。 ●递增式代码装载-用户能够控制代码如何被装载的细节。 ●外部接口-Erlang进程与外部...
书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...
● 热代码升级-Erlang允许程序代码在运行系统中被修改。旧代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。 ●递增式代码装载-用户能够控制代码如何被装载的细节。 ●外部接口-Erlang进程与外部...
犯错Concuerror是用于Erlang程序的无状态模型检查工具。 它可用于系统地测试程序的并发错误,检测和报告仅在少数特定计划中发生的错误,或验证其不存在。 以获取文档,示例,教程,出版物以及更多内容!支持的OTP...
书是讲述下一代编程语言Erlang 的权威著作,主要涵盖顺序型编程、异常处理、编译和运行代码、并发编程、并发编程中的错误处理、分布式编程、多核编程等内容。本书将帮助读者在消息传递的基础上构建分布式的并发系统...
更具体地说,这个项目的目标是允许 Erlang/OTP 开发人员通过将横切关注点(例如日志记录)放入单独的文件(即模块)又名方面来保持他们的应用程序干净和易于理解。 在撰写本文时, weaverl 仅支持 。 到目前为止,...
Erlang gen_microservice 这个库解决了用 Erlang 实现微服务的问题。 您的代码只需要将行为... 该库与 Erlang 的九个九运行时无缝集成,因此我们也为您提供了相关信息。 分布式系统 分布式系统是当今的话题。 您的TOD
多数erlang表达任意Arity函数模式匹配记录(通过元组) 二进制文件Lambdas 尾递归例外情况流程字典代码服务器,模块加载进出口商品兼容性实用程序常见错误( function_clause , case_clause , badarity等)部分...
错误默认该项目旨在包括大量用于调试,开发和测试erlang项目的帮助程序。user_default user_default是一个文件,可以在其中调用所有导出的函数而无需从外壳程序获取模块前缀的情况。 有关user_default的文档,请在...
erlang-standard-snippets ...从 shell 运行 esnipper 会给出很好的打印错误,要在 shell 中运行,请执行以下操作: { ok , _ } = c ( esnipper , [ debug_info ]), esnipper : main ([ dict , lists ])
在ERLANG中,对于上述的问题的解决方式采用语言+库一起作用的方式来解决,满足在程序有错误的情况下,我们的代码依旧会按照合理的方式运行 本文不关注算法细节、硬件假设、软件工程方面的要求 而是关注与软件的容错...
运行时失败 自定义默认的信号接收动作 未定义函数和未注册名称 第8章编写健壮的应用程序 防范错误数据 健壮的服务进程 分离计算部分 保持进程存活 讨论 第9章杂项 末尾调用优化 引用 代码替换 端口 二...
注意:这主要是为了演示如何让 Cowboy 应用程序运行起来,在使用现代前端工具的同时提供模板化的 HTML。 充其量,您应该使用它来弄清楚这些东西是如何连接的以及如何启动和运行应用程序。 它不打算成为一个受支持的...