erlang趣事五之catch和try_catch

来源:互联网 发布:朱元璋废丞相知乎 编辑:程序博客网 时间:2024/06/05 15:50

前一段时间得到一份erlang的面试题,看了之后觉得好多都不会大哭,趁周末有时间整理下。

简述catch与try…catch用法上的区别,以及怎么获取最近的栈跟踪信息。


当时看到后,心里默念什么鬼?
本人水平比较菜,所以不知道,就去找书去了。
我又看了一遍 第6章:顺序编程的错误处理
得到了答案:
首先,我写个测试的moudle,便于理解。上代码:
-module(test1).%%% =================================================================%%% API functions%%% =================================================================-export([ test_try_catch/0, test_catch/0]).%%% =================================================================%%% Internal functions%%% ================================================================test_try_catch()->try 1/0catch        throw:Term ->            Term;        exit:Reason ->            Reason;        error:Reason->            Reasonend.test_catch()->catch  1/0.

看明白了没,
书上关于两者的说明是:
try...catch
首先执行FuncOrExpessionSeq,如果执行过程中没有抛出异常错误,就会返回需要的返回值;
如果执行过程中抛出了异常错误,那么就会在catch里进行匹配,ExceptionType 是一个原子(throw,exit,error其中一个),如果省略它,就会使用默认值throw。
catch
在catch语句里发生异常,就会转换成一个描述词错误的{‘EXIT’,...}的元组。

并且两中方法提供了不同量级的调试信息。catch提供了详细的栈跟踪信息。
栈跟踪:erlang:get_stacktrace().


本人菜鸟水平,如有不对,请指正,大神请绕过!

0 0
原创粉丝点击