gpt4 book ai didi

exception - 如何在 Erlang 中捕获异常消息?

转载 作者:行者123 更新时间:2023-12-02 23:58:35 24 4
gpt4 key购买 nike

这是Gen_server未启动时抛出的异常消息。

(ankit@127.0.0.1)32> R11 = system_warning:self_test("SysWarn").
** exception exit: {noproc,
{gen_server,call,
[system_warning_sup,
{start_child,
{system_warning_SysWarn,
{system_warning,start_link,[{system_warning_SysWarn}]},
permanent,10,worker,
[system_warning]}},
infinity]}}
in function gen_server:call/3
in call from system_warning_sup:'-start_child/1-lc$^0/1-0-'/1
in call from system_warning:self_test/1
(ankit@127.0.0.1)33> R11.
* 1: variable 'R11' is unbound

现在,我想要做的是捕获此异常消息并放入变量 R11(如上所示为未绑定(bind))。我想这样做是因为如果 gen_sever 没有启动,那么我想在收到此消息后启动。我也尝试使用handle_info,但无法捕获异常或者可能无法正确实现它。任何人都可以帮助我解决这个问题,例如提供一些代码。

最佳答案

@W55tKQbuRu28Q4xv 和 @Zed 的答案都是正确的,但有点简洁。 :-)

本地捕获错误有两种方法:catchtry。两者还将捕获由 throw 生成的非本地返回。

catch 是两者中较旧且更简单的,其语法为 catch Expr。如果正在计算的表达式中发生错误,则 catch 返回 {'EXIT',ErrorValue},否则仅返回表达式的值。它的一个问题是无法查看错误返回值是如何生成的,因此很容易在表达式中伪造它。同样,您无法查看返回值是否来自 throw。注意:这不是错误,而是一项功能。它也是一个优先级较低的前缀运算符,因此您通常会像这样使用它:

R11 = (catch system_warning:self_test (....))

避免混淆。这是一个错误,应该是 catch ... end

throw 更复杂,允许您更好地控制要捕获的内容以及如何处理正常返回和错误/非本地返回。请参阅手册以获取完整说明。 @Zed 的示例显示了捕获所有内容的最简单情况。

关于exception - 如何在 Erlang 中捕获异常消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2161026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com