erlang趣事五之catch和try_catch

前一段时间得到一份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.
erlang趣事五之catch和try_catch_第1张图片

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

并且两中方法提供了不同量级的调试信息。catch提供了详细的栈跟踪信息。
栈跟踪:erlang:get_stacktrace().
erlang趣事五之catch和try_catch_第2张图片


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

你可能感兴趣的:(erlang)