如果require
不成功,我想避免错误。
我可以这样做:
begin
require 'unexisting_script'
rescue LoadError
end
我尝试对单行条件执行相同操作:
require 'unexisting_script' rescue LoadError
并得到错误
no such file to load -- unexisting_script (LoadError)
除其他异常(exception)/命令外,我在单行救援方面没有问题,这可行:
1 / 0 rescue ZeroDivisionError
我也尝试在命令中加上括号,但取得了成功:
(require 'unexisting_script') rescue LoadError
我可以将所有内容与
;
放在一行中:begin require 'unexisting_script'; rescue LoadError; end
但我仍然想知道,为什么最短的版本不起作用。
我发现了一些相关的问题,但是没有一个提到需求和救援的问题:
我的问题:
我可以在
rescue
的单行条件下使用require
吗?如果是:如何?如果没有:为什么? 最佳答案
当以postfix/oneliner表示法使用rescue
时,不能指定错误类别。 rescue LoadError
或rescue ZeroDivisionError
的意思是它将拯救StandardError
(的子类),在这种情况下,评估LoadError
或ZeroDivisionError
无效。由于ZeroDivisionError
是StandardError
的子类,因此已将其捕获,但未捕获LoadError
,因此未捕获。
顺便说一句,我想不出一个用例,当不需要的文件不存在时,您不希望引发错误。所需文件是依赖项,如果要求失败,则该程序将无法正常运行。我在做的事情中感觉到代码的味道。当加载文件失败不会使程序困惑时,通常是在应该使用load
而不是require
的情况下。