我在Erlang中编码,我对如何处理错误处理有点不确定,特别是在看到Erlang总是返回的丑陋错误之后.
我应该在Erlang中使用try catch还是应该传回错误令牌?
Erlang的基本原则是:
让它崩溃!
我发现避免所谓的防御性编程非常有用.在Erlang编程规则页面中更详细地解释了这个概念:
http://www.erlang.se/doc/programming_rules.shtml#HDR11
而且,即使一些Erlang错误可能有点神秘,一个很好的处理方法是跟踪它们!在Erlang中进行跟踪非常简单.看看这个快速参考:
http://aloiroberto.wordpress.com/2009/02/23/tracing-erlang-functions/
或者只是参考官方文档.
这说,我完全同意@jdupont.
在顺序Erlang中进行异常处理有三种基本方法:
throw(Term))erlang:error(Reason))exit(Reason))抛出将用于非本地返回以及您希望能够处理的某些异常(可能因为它们经常发生).当那个被提升时,你应该在它到达你的模块之前尝试阻止它.在stdlib中使用它的常用方法是抛出一个元组,在{error, Reason}将try...catch元组返回给用户之前,它将被一个顶级函数捕获.然后,用户可以基于该返回值来决定做什么.
另一方面,错误指向不可恢复的异常.他们通常会要求用户更改他的代码.它们包括像运行时错误if或case ... of分支机构不能匹配,不能匹配或不存在的功能,等这个错误的目的是崩溃,而不应被抓或在大多数本地处理的过程案例(让主管或监控过程接收错误消息,然后为您记录或在接口级别为用户处理).
当您特别希望进程终止时,将使用退出.有时候我不清楚何时使用退出或错误,但我给出的提示是区分意图.
错误和退出很少应该被顺序捕获和处理(你必须确定你知道如何解决问题!),因为其他流程已经到位处理它.让它崩溃.
(更多细节:http://learnyousomeerlang.com/errors-and-exceptions)
下一级是处理多进程环境中的错误.此时执行操作的标准方法是将进程链接在一起(和/或使用主管)来获取死进程及其原因:重启它们,记录消息,进行维护,在系统不断滚动时进行升级.
您将获得多个进程的新异常函数:exit(Pid, Reason).这使您可以在另一个进程上调用"exit".在这种情况下,必须通过process_flag(trap_exit, true)在监视器进程中进行设置来完成错误处理,之后您可以通过标准receive表达式获取退出信号.
注意一种特殊的退出方式,即exit(Pid, kill)终止进程而没有任何可能性来捕获它.Pid然后,链接到的其他进程应接收表单的信号{'EXIT', killed}.
使用监督树是确保程序继续运行的方法.尽早崩溃也是必不可少的,以确保你不会腐败任何东西; 早期有问题的代码停止运行,更容易清理它.
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |