gpt4 book ai didi

exception - Erlang中的异常处理以继续执行

转载 作者:行者123 更新时间:2023-12-03 08:12:54 25 4
gpt4 key购买 nike

我想做的是mochijson2:decode(Ccode)生成任何异常或错误,程序不应停止,并且case分支{error,Reason}应该得到执行。

但是,当我尝试实现它时,它在检查时在第一行生成错误,并且代码不会继续对其下面的行执行。

SCustomid = case mochijson2:decode(Ccode) of
{struct, JsonDataa} ->
{struct, JsonData} = mochijson2:decode(Ccode),
Mvalll = proplists:get_value(<<"customid">>, JsonData),
Pcustomid = erlang:binary_to_list(Mvalll),
"'" ++ Pcustomid ++ "'";
{error, Reason} -> escape_str(LServer, Msg#archive_message.customid)


end,

您可以建议我是否需要使用Try Catch。我对Ejabberd有点经验,但是对Erlang还是新手。任何帮助表示赞赏。

最佳答案

似乎原因是mochijson2:decode/1中发生异常。该函数不会以元组形式返回错误,而是会导致进程崩溃。没有足够的信息来说明原因到底是什么。但是我猜想Ccode的数据格式可能是错误的。您可以使用try ... catch语句处理异常:

SCustomid = try
case mochijson2:decode(Ccode) of
{struct, JsonDataa} ->
{struct, JsonData} = mochijson2:decode(Ccode),
Mvalll = proplists:get_value(<<"customid">>, JsonData),
Pcustomid = erlang:binary_to_list(Mvalll),
"'" ++ Pcustomid ++ "'";
{error, Reason} ->
escape_str(LServer, Msg#archive_message.customid)
end
catch
What:Reason ->
escape_str(LServer, Msg#archive_message.customid)
end,

或者只是 catch:
SCustomid = case catch(mochijson2:decode(Ccode)) of
{struct, JsonDataa} ->
{struct, JsonData} = mochijson2:decode(Ccode),
Mvalll = proplists:get_value(<<"customid">>, JsonData),
Pcustomid = erlang:binary_to_list(Mvalll),
"'" ++ Pcustomid ++ "'";
{error, Reason} ->
escape_str(LServer, Msg#archive_message.customid);
{What, Reason} ->
escape_str(LServer, Msg#archive_message.customid)
end,

关于exception - Erlang中的异常处理以继续执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30237413/

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