使用此代码时,会引发此异常并且未返回失败:
在 Sicstus Polog 中:
number_codes/2 中的语法错误!数字语法!在第 0 行
在 SWI-Prolog 中:
错误:number_chars/2:语法错误:非法数字
number_codes(Number,"m"),
catch(number_codes(Number,List),error(syntax_error(_),_), fail).
如何使它在此异常上返回失败。
使用此代码时,会引发此异常并且未返回失败:
在 Sicstus Polog 中:
number_codes/2 中的语法错误!数字语法!在第 0 行
在 SWI-Prolog 中:
错误:number_chars/2:语法错误:非法数字
number_codes(Number,"m"),
catch(number_codes(Number,List),error(syntax_error(_),_), fail).
如何使它在此异常上返回失败。
捕获语法错误的 ISO 方法是编写:
catch(number_codes(Number,"m"),error(syntax_error(_),_), fail).
第一个参数是要保护的目标,第二个参数是要捕获的模式。在这种情况下,您想要捕获错误。错误都是error(E,_)
第一个参数是具体错误项的形式,在这种情况下syntax_error(_)
。第二个参数是实现定义的。所以你不能依赖它的精确格式。
永远不要简单地抓住一切(如@CapelliC)所建议的。通过这种方式,您可能会无意中隐藏一些意外错误。
这应该是“丢弃”异常的正确语法
?- catch(number_codes(X,"m"),_,true).
true.
?- catch(number_codes(X,"m"),_,false).
false.
要检查错误详细信息,请尝试
?- catch(number_codes(X,"m"),error(E,C),(writeln(E:C),false)).
syntax_error(illegal_number):context(number_codes/2,_G12951)
false.
(我在 SWI-Prolog 中测试过......)