gpt4 book ai didi

erlang - 如何在Erlang中进行尝试/捕获

转载 作者:行者123 更新时间:2023-12-04 05:14:59 28 4
gpt4 key购买 nike

我对erlang很陌生,我正在尝试使用基本的try/catch语句来工作。我正在使用Webmachine处理一些请求,我真正想做的就是解析一些JSON数据并将其返回。如果JSON数据无效,我只想返回一个错误消息。这是我拥有的代码迄今为止。

(JSON数据无效)

to_text(ReqData, Context) ->    
Body = "{\"firstName\": \"John\"\"lastName\": \"Smith\"}",
try decode(Body) of
_ -> {"Success! Json decoded!",ReqData,Context}
catch
_ -> {"Error! Json is invalid",ReqData,Context}
end.


decode(Body) ->
{struct, MJ} = mochijson:decode(Body).

代码可以编译,但是当我运行它并发送文本请求时,我又收到了以下错误。
error,{error,{case_clause,{{const,"lastName"},
": \"Smith\"}",
{decoder,utf8,null,1,31,comma}}},
[{mochijson,decode_object,3},
{mochijson,json_decode,2},
{webmachine_demo_resource,test,1},
{webmachine_demo_resource,to_text,2},
{webmachine_demo_resource,to_html,2},
{webmachine_resource,resource_call,3},
{webmachine_resource,do,3},
{webmachine_decision_core,resource_call,1}]}}

我到底在做什么错?文档说“catch”语句可以处理所有错误,或者我是否必须做一些事情来捕捉由mochijson:decode引发的特定错误。
请任何线索或建议会有所帮助。谢谢。

最佳答案

捕获子句_ -> ...仅捕获“throw”类的异常。要捕获其他种类的异常,您需要以Class:Term -> ...形式写一个模式(即,默认Classthrow)。在您的情况下:

catch
_:_ -> {"Error! Json is invalid", ReqData, Context}
end
执行此操作时,应始终问自己为什么要捕获所有可能的异常。如果是因为您正在调用第三方代码而又不知道它的行为方式,通常是可以的。如果要调用自己的代码,请记住,基本上是在丢弃有关故障的所有信息,这可能会使调试更加困难。如果您可以将其范围缩小到仅捕获特定的预期情况,并允许其他任何异常通过(这样您就可以看到真正的故障发生在哪里),则可以这样做。

关于erlang - 如何在Erlang中进行尝试/捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4412640/

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