尝试catch_list_to_integer没有捕获错误

时间:2017-08-31 04:37:17

标签: erlang

1> FOO:帧间()。 **异常错误:错误的参数      在函数foo中:inter / 0(foo.erl,第7行)

-module(foo).
-compile(export_all).

inter() ->
  A = <<"5a">>,
  B = binary_to_list(A),
  try list_to_integer(B) of
    Result -> Result
  catch
    _ -> {error, bad_integer}
  end.

我希望得到{error,bad_integer}。

1 个答案:

答案 0 :(得分:5)

Erlang中有3 types of exceptionserrorexitthrowcatch子句的格式为Type:Pattern。如果未在代码中指定Type,则在throw引发list_to_integer时仅会捕获error个例外。您可以使用error捕获所有error:_或使用_:_捕获任何异常。

1> try list_to_integer("5a") of
1>   Result -> Result
1> catch
1>   _:_ -> {error, bad_integer}
1> end.
{error,bad_integer}