Erlang之异常处理

%% Code from
%% Erlang Programming
%% Francecso Cesarini and Simon Thompson
%% O’Reilly, 2008
%% http://oreilly.com/catalog/9780596518189/
%% http://www.erlangprogramming.org/
%% © Francesco Cesarini and Simon Thompson

-module(exception).
-export([return_error/1,try_return/1,try_wildcard/1,try_return2/1,return/1]).

return_error(X) when X < 0 ->
throw({‘EXIT’, {badarith,
[{exception,return_error,1},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_exprs,6},
{shell,eval_loop,3}]}});
return_error(X) when X == 0 ->
1/X;
return_error(X) when X > 0->
{‘EXIT’, {badarith, [{exception,return_error,1},
{erl_eval,do_apply,5},
{shell,exprs,6},
{shell,eval_exprs,6},
{shell,eval_loop,3}]}}.

try_return(X) when is_integer(X) ->
try return_error(X) of
Val -> {normal, Val}
catch
exit:Reason -> {exit, Reason};
throw:Throw -> {throw, Throw};
error:Error -> {error, Error}
end.

try_wildcard(X) when is_integer(X) ->
try return_error(X)
catch
throw:Throw -> {throw, Throw};
error:_ -> error;
Type:Error -> {Type, Error};
_ -> other; %% Will never be returned
: -> other %% Will never be returned
end.

try_return2(X) when is_integer(X) ->
try return_error(X) of
Val -> {normal, Val}
catch
exit:_ -> 34;
throw:_ -> 99;
error:_ -> 678
end.

return(X) when is_integer(X) ->
catch return_error(X).

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值