Erlang(7):顺序程序的错误处理

祁晟
2023-12-01
显式生成错误的方法:
exit(Why) 广播一个信号给当前进程链接的所有进程。
throw(Why) 抛出一个调用者可能想要捕捉的异常错误。
error(Why) 指示奔溃性错误,非常严重的错误。


捕捉错误,try...catch

try FuncOrExpressionSeq of
	Pattern1[when Guard1] -> Expressions1;
	Pattern2[when Guard2] -> Expressions2;
	...
catch
	ExceptionType1: ExPattern1 [when ExGuard1] -> ExExpressions1;
	ExExpressions2: ExPattern2 [when ExGuard2] -> ExExpressions2;
	...
after
	AfterExpressions
end

提供了概括的信息


catch 语句,比try...catch更加早引入Erlang。

提供了详细的栈跟踪信息。


经常出现错误的时候的代码:

case f(x) of
    {ok, Val} ->
         do_some_thing_with(Val);
    {error, Why} ->
          %% ... 处理这个错误...
end,
...


错误可能有但罕见时的代码

try my_func(X)
catch
    throw:{thisError, X} -> ...
    throw:{someOtherError, X} -> ...
end


捕捉一切异常错误:

try Expr
catch
    _:_ -> ... 处理所有异常错误的代码
end

erlang:get_stacktrace()获得最近的栈跟踪信息。


有错误,就要尽量往外面抛,展现出来。让程序彻底奔溃。这是Erlang 的原则。

或许吧。

但是不是做游戏的原则。

至少不是做游戏服务端的原则。

我们可以容忍错误的存在。因为我们是快速开发。bug是修不完的。

只能建一个修一个。




 类似资料: