【Erlang】十八、异常捕捉

异常捕捉


try…catch

调用一个函数,如果返回异常,则进行处理,否则正常执行

%% demo.erl
-module(demo)

%% 主动模拟错误的函数
generate_exception(1) -> a;				%% 正常返回
generate_exception(2) -> throw(a);		%% 异常错误
generate_exception(3) -> exit(a);		%% 终止
generate_exception(4) -> {'EXIT', a};	%% 返回的值不在模式匹配中
generate_exception(5) -> error(a).		%% 崩溃性错误

demo1() ->
	[catcher(I) || I <- [1,2,3,4,5]].
	
catcher(N) ->
	try generate_exception(N) of
		%% Val 是调用 generate_exception 后返回的值
		Val -> {N, normal, Val}
	catch
		throw:X -> {N, caught, thrown, X};
		exit:X -> {N, caught, thrown, X};
		error:X -> {N, caught, thrown, X}
	end.

%% 运行结果
%% [{1, normal, a},{2,caught,thrown,a},{3,caught,exited,a},{4,normal,{'EXIT',a}},{5,caught,error,a}]

堆栈

捕捉到异常时,可以调用 erlang:get_stacktrace() 得到调用堆栈,来追寻问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值