【发布时间】:2014-06-23 08:48:16
【问题描述】:
我在 Erlang 中有以下代码,其中我正在修改一个不存在的模块。 在某些版本的 Erlang/meck 中,这会生成一个似乎无法捕获的异常。
有人知道 Erlang 中是否有“无法捕获的异常”功能吗?
try
meck:new(i_dont_exist),
io:format("No exception in this version of Erlang ... :( "),
no_problems
catch
exit:_ -> exit;
error:_ -> error;
throw:_ -> throw;
_:_ -> what_class_is_it
after
io.format("in the after~n")
end.
当我执行这段代码时,这就是我得到的(请注意,甚至“after”子句都没有被执行,所以它对我来说更像是一个错误):
** exception exit: {undefined_module,i_dont_exist}
in function meck_proc:resolve_can_expect/3 (src/meck_proc.erl, line 402)
in call from meck_proc:init/1 (src/meck_proc.erl, line 194)
in call from gen_server:init_it/6 (gen_server.erl, line 304)
in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 227)
我也尝试过使用“catch”表达式,结果相同:
> catch meck:new(i_dont_exist).
** exception exit: {undefined_module,i_dont_exist}
in function meck_proc:resolve_can_expect/3 (src/meck_proc.erl, line 402)
in call from meck_proc:init/1 (src/meck_proc.erl, line 194)
in call from gen_server:init_it/6 (gen_server.erl, line 304)
in call from proc_lib:init_p_do_apply/3 (proc_lib.erl, line 227)
【问题讨论】: