erlang趣事五之catch和try_catch

论坛 期权论坛 脚本     
匿名技术用户   2020-12-27 14:28   11   0

前一段时间得到一份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().


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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP