如果require
未成功,我想避免错误。
我可以用:
begin
require 'unexisting_script'
rescue LoadError
end
我尝试用一行条件做同样的事情:
require 'unexisting_script' rescue LoadError
并收到错误no such file to load -- unexisting_script (LoadError)
使用其他例外/命令我对单行救援没有任何问题,这可行:
1 / 0 rescue ZeroDivisionError
我也尝试将命令括起来,但是成功了:
(require 'unexisting_script') rescue LoadError
我可以将所有内容与;
:
begin require 'unexisting_script'; rescue LoadError; end
但我仍在疑惑,为什么最短的版本不起作用。
我发现了一些相关的问题,但没有人提到需要和救援的问题:
我的问题:
我可以在rescue
的单行条件下使用require
吗?如果是的话:怎么样?如果不是:为什么?
答案 0 :(得分:9)
在postfix / oneliner表示法中使用rescue
时,无法指定错误类。 rescue LoadError
或rescue ZeroDivisionError
的含义是它会拯救StandardError
的(子类),在这种情况下,评估LoadError
或ZeroDivisionError
,它没有影响。由于ZeroDivisionError
是StandardError
的子类,因此它已被捕获,但LoadError
未被捕获,并且未被捕获。
顺便说一句,我想不出一个用例,当你不想要文件不存在时,你不想提出错误。必需的文件是依赖项,如果要求它们失败,那么程序无论如何都无法正常工作。我觉得你在做什么的代码味道。如果加载文件失败不会导致程序混乱,通常应该使用load
代替require
。