首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[笔记]erlang的错误处理

2013-07-01 
[笔记]erlang的异常处理erlang的异常处理没有什么太大的特别的异常分为:errorthrowexit(一般正常退出也用

[笔记]erlang的异常处理

erlang的异常处理没有什么太大的特别的

异常分为:

errorthrowexit(一般正常退出也用这个)

原来的做法是用catch:

1> catch 0.02> catch throw(0).03> catch a=b.{'EXIT',{{badmatch,b},[{erl_eval,expr,3,[]}]}}4> catch exit(0).{'EXIT',0}

?从上到下分别是:

正常:直接输出

throw异常:直接输出异常原因

error(匹配错误):输出详细内容

exit:输出退出和退出原因

?

然后有一个例子 简单记一下:

-module(excep).-export([ec_test/0]).ec_test() ->try  %% throw("throw exception") %抛出一个异常  %% 0                        %正常输出  %% a=b                      %一个匹配错误  exit(0)of  0 ->io:format("0~n");  _ ->io:format("other~n")catch  throw:Case -> io:format("throw exception:~p~n",[Case]);  error:Case -> io:format("error:~p~n",[Case]);  exit:Case  -> io:format("exit:~p~n",[Case]) after  io:format("program exit~n")end.

?格式可以是:

try...catch...try..of..catchtry...after,,,,或者以上的 try...of...catch...after

?

只有try那边抛出的异常才会被捕获到

of和catch出现异常不会被捕获

after无论如何都会被执行,如果after有异常那么他的异常会取代掉try中的异常

?

这边的格式也需要注意

最后一定会有个end说明结束了

但每一块中的最后一个语句是不用加符号的(不用写 ,(逗号) 或者 ;(分号))

?

也顺便说下我关于符号的理解吧

句号 . 表示结束(用于shell输入语句 或者函数结束等)

分号 ; 表示并列(用书case if 和同名函数的并列)

逗号 . 表示顺序执行(好像说的不太对 when的条件,语句等)

? ? ? ? $ 取对应字符的数值

? ? ? ? # 进制#数值 例如 2#0101(5).

?

其他的内容

erlang:get_stacktrace(). 获得异常堆栈

erlang:raise(错误类别,原因,堆栈). 用来再次抛出异常.

热点排行