Erlang退出,原因为-unde(字符串:find/2 func)

Erlang退出,原因为-unde(字符串:find/2 func),erlang,Erlang,尝试使用函数string:find/2,但每次都出现错误 CRASH REPORT Process <0.779.0> with 0 neighbours exited with reason: {{undef,[{string,find,[[<<208,162,51,32,208,190,208,177,209,137,46,44,32,84,51,32,116,111,116,97,108,44>>],[<<208,186,209,128,20

尝试使用函数
string:find/2
,但每次都出现错误

CRASH REPORT Process <0.779.0> with 0 neighbours exited with reason: {{undef,[{string,find,[[<<208,162,51,32,208,190,208,177,209,137,46,44,32,84,51,32,116,111,116,97,108,44>>],[<<208,186,209,128,208,190,208,178>>]],[]},{proxy_layer_cli_handle_req,do_execute_keysearch,4,[{file,\"/opt/proxy_layer/_build/test/lib/proxy_layer/src/proxy_layer_cli_handle_req.erl\"},{line,222}]},{proxy_layer_cli_handle_req,keysearch,3,[{file,\"/opt/proxy_layer/_build/test/lib/proxy_layer/src/proxy_layer_cli_handle_req.erl\"},{line,...}]},...]},...}
0邻居的崩溃报告进程退出,原因如下:{{unde,[{string,find,[[],[],[]},{proxy\u layer\u cli\u handle\u req,do\u execute\u keysearch,4,[{file,\'”/opt/proxy\u layer/\u build/test/lib/proxy\u layer/src/proxy\u layer\u cli\u handle\u req.erl\”},{line,222},{layer\u cli handle\u-req,keysearch,3,{\“/opt/proxy\u layer/\u build/test/lib/proxy\u layer/src/proxy\u layer\u cli\u handle\u req.erl\”},{line,…},…]},…}
当我在终端使用它时,一切都很好

1> string:find(<<208,162,51,32,208,190,208,177,209,137,46,44,32,84,51,32,116,111,116,97,108,44>>,<<208,186,209,128,208,190,208,178>>).     
1> nomatch
1>字符串:查找(,)。
1> 游牧民族
我正在使用Erlang20.1

以下是我使用的代码:

do_execute_keysearch([First|Rest], PriceList, Keyword, Acc) ->
  Id = utils:get_value(<<"Id">>, First),
  case utils:get_value(<<"Keywords">>, First) of
    <<>> -> do_execute_keysearch(Rest, PriceList, Keyword, Acc);
    undefined -> do_execute_keysearch(Rest, PriceList, Keyword, Acc);
    Keys ->
      case string:find(Keys, Keyword) of
        nomatch ->
          do_execute_keysearch(Rest, PriceList, Keyword, Acc);
        _ ->
          Price = find_price_by_service_id(PriceList, Id),
          NewAcc = [lists:append(Price, First) | Acc],
          do_execute_keysearch(Rest, PriceList, Keyword, NewAcc)
      end
    end;
do_execute_keysearch([First | Rest],PriceList,关键字,Acc)->
Id=utils:get_值(,First),
case utils:get_值(,First)
->执行关键字搜索(Rest、价目表、关键字、Acc);
未定义->执行关键字搜索(Rest、价目表、关键字、Acc);
钥匙->
大小写字符串:查找的(键、关键字)
nomatch->
执行关键字搜索(Rest、价目表、关键字、Acc);
_ ->
价格=通过服务id(价格表,id)查找价格,
NewAcc=[列表:追加(价格,第一)| Acc],
执行关键字搜索(Rest、价格表、关键字、NewAcc)
结束
结束;
更新: 在docker容器中更改Erlang版本后,问题已修复。(更改为Erlang 20.1) 不知道为什么Erlang 19中有一些未定义的模块


所以问题现在解决了

请更仔细地观察错误。或者更确切地说,试着重现它。以下哪一项看起来更像您的错误

1> catch lists:nonexist(<<1>>, <<2>>).
{'EXIT',{undef,[{lists,nonexist,[<<1>>,<<2>>],[]},
                {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]},
                {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,431}]},
                {shell,exprs,7,[{file,"shell.erl"},{line,687}]},
                {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]},
                {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}]}}
2> catch lists:nonexist([<<1>>], [<<2>>]).
{'EXIT',{undef,[{lists,nonexist,[[<<1>>],[<<2>>]],[]},
                {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]},
                {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,431}]},
                {shell,exprs,7,[{file,"shell.erl"},{line,687}]},
                {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]},
                {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}]}}
1>捕获列表:不存在(,)。
{'EXIT',{unde,[{lists,nonexist,[,],[]},
{erl_eval,do_apply,6,[{文件,“erl_eval.erl”},{line,674}]},
{erl_eval,expr,5,[{file,“erl_eval.erl”},{line,431}]},
{shell,exprs,7,[{file,“shell.erl”},{line,687}]},
{shell,eval_exprs,7,[{file,“shell.erl”},{line,642}]},
{shell,eval_循环,3,[{file,“shell.erl”},{line,627}]}}
2> 捕获列表:不存在([],[])。
{'EXIT',{unde,[{lists,nonexist,[[],[]],[]},
{erl_eval,do_apply,6,[{文件,“erl_eval.erl”},{line,674}]},
{erl_eval,expr,5,[{file,“erl_eval.erl”},{line,431}]},
{shell,exprs,7,[{file,“shell.erl”},{line,687}]},
{shell,eval_exprs,7,[{file,“shell.erl”},{line,642}]},
{shell,eval_循环,3,[{file,“shell.erl”},{line,627}]}}

string:find/2
这就是为什么在Erlang 19中出现
undef
错误的原因。解决方案是升级到Erlang 20(您已经这样做了).

请提供完整的示例以再现错误。感谢您的回答。找到了问题!我正在使用docker,有erlang 19vsn。不知道为什么它没有一些erlang模块。将版本更改为20.1,错误消失。明白了。感谢您的回答