您的位置:首页 > 其它

erlang趣事五之catch和try_catch

2016-03-06 11:11 211 查看
前一段时间得到一份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/0
catch
throw:Term ->
Term;
exit:Reason ->
Reason;
error:Reason->
Reason
end.

test_catch()->
catch  1/0.



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

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



本人菜鸟水平,如有不对,请指正,大神请绕过!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: