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