(1)erlang的三个异常原语:
exit(why)
throw(why)
erlang:error(why)
三个原语的运行结果:
(2)try catch 捕获异常
test()->
[catcher(I)||I<-[1,2,3,4,5]].
generate_exception(1)->a;
generate_exception(2)->{'EXIT', test};
generate_exception(3)->throw(test);
generate_exception(4)->exit(test);
generate_exception(5)->erlang:error(test).
catcher(N)->
try generate_exception(N) of
Val->{N,normal,Val}
catch
throw:X->{N,caught,throw,X};
exit:X->{N,exit,throw,X};
error:X->{N,error,throw,X}
end.
运行test()函数结果
分析:
try -catch中的
throw:X,exit:X,error:X表示当捕获到这三个异常原语是,exit(why),throw(why),erlang:error(why)执行其函数{N,caught,throw,X},{N,caught,exit,X},{N,caught,error,X}throw:X->{N,caught,throw,X}; exit:X->{N,exit,throw,X}; error:X->{N,error,throw,X}
如果没有捕获到这三个异常原语,则执行Val->{N,normal,Val}
如果没有捕获异常,则在遇到三个异常原语时,会自动退出进程