Exception 在Erlang中处理异常以继续执行
我试图做的是Exception 在Erlang中处理异常以继续执行,exception,error-handling,exception-handling,erlang,ejabberd,Exception,Error Handling,Exception Handling,Erlang,Ejabberd,我试图做的是mochijson2:decode(Ccode)生成任何异常或错误,程序执行不应该停止,case分支{error,Reason}应该执行 但当我试图实现它时,它会在第一行检查时产生错误,代码不会继续执行它下面的行 SCustomid = case mochijson2:decode(Ccode) of {struct, JsonDataa} -> {struct, JsonData} = mochijson2:decode(Ccode), Mv
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,
SCustomid=case mochijson2:
{struct,JsonDataa}->
{struct,JsonData}=mochijson2:decode(Ccode),
Mvalll=proplist:get_值(,JsonData),
Pcustomid=erlang:binary-to-list(Mvalll),
“'++Pcustomid++'”;
{error,Reason}->escape_str(LServer,Msg#archive_message.customid)
完,,
你可以建议我是否需要使用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,
您可以使用以下选项:
SCustomid = try
{struct, JsonData} = mochijson2:decode(Ccode),
Mvalll = proplists:get_value(<<"customid">>, JsonData),
Pcustomid = erlang:binary_to_list(Mvalll),
"'" ++ Pcustomid ++ "'"
catch _:_ -> escape_str(LServer, Msg#archive_message.customid)
end
SCustomid=try
{struct,JsonData}=mochijson2:decode(Ccode),
Mvalll=proplist:get_值(,JsonData),
Pcustomid=erlang:binary-to-list(Mvalll),
““++Pcustomid++”
捕获:->escape_str(LServer,Msg#archive_message.customid)
结束
SCustomid = try
{struct, JsonData} = mochijson2:decode(Ccode),
Mvalll = proplists:get_value(<<"customid">>, JsonData),
Pcustomid = erlang:binary_to_list(Mvalll),
"'" ++ Pcustomid ++ "'"
catch _:_ -> escape_str(LServer, Msg#archive_message.customid)
end