Erlang中定义了一些特殊的原子,用于表示常见的错误和异常情况。例如,'badarg'表示参数错误,'badmatch'表示模式匹配失败,'undef'表示未定义的函数等。在编写函数时,可以使用这些错误原子来表示函数执行失败的情况。
Erlang中的try...catch...语句可以用于捕获和处理异常情况。在try块中执行代码,如果出现异常,则会跳转到catch块中执行异常处理代码。可以使用catch关键字来捕获任何类型的异常,也可以使用catch Type关键字来捕获特定类型的异常。例如,以下代码演示了如何捕获模式匹配失败的异常:
try
{X, Y} = {1, 2, 3},
io:format("X = ~p, Y = ~p~n", [X, Y])
catch
error:badmatch ->
io:format("Pattern match failed!~n")
end.
Erlang中的throw和catch语句可以用于抛出和捕获异常。可以使用throw函数抛出任何类型的异常,然后使用catch语句捕获异常并处理。例如,以下代码演示了如何使用throw和catch语句抛出和捕获异常:
try
X = 1,
if X > 0 -> throw(foo); true -> ok end,
io:format("This line will not be executed.~n")
catch
foo:throw ->
io:format("Caught exception!~n")
end.
Erlang中的错误处理函数可以用于处理系统级别的异常和错误,例如节点崩溃、分布式系统错误等。可以使用error_handler模块来定义自定义的错误处理函数,然后在应用程序启动时进行注册。例如,以下代码演示了如何定义和注册自定义的错误处理函数:
my_error_handler(Reason) ->
io:format("Error occurred: ~p~n", [Reason]).
start() ->
error_handler:add(my_error_handler, 0),
... % other application startup code