使用带有require / rescue的单行条件

时间:2013-11-12 08:57:41

标签: ruby require rescue

如果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吗?如果是的话:怎么样?如果不是:为什么?

1 个答案:

答案 0 :(得分:9)

在postfix / oneliner表示法中使用rescue时,无法指定错误类。 rescue LoadErrorrescue ZeroDivisionError的含义是它会拯救StandardError的(子类),在这种情况下,评估LoadErrorZeroDivisionError,它没有影响。由于ZeroDivisionErrorStandardError的子类,因此它已被捕获,但LoadError未被捕获,并且未被捕获。

顺便说一句,我想不出一个用例,当你不想要文件不存在时,你不想提出错误。必需的文件是依赖项,如果要求它们失败,那么程序无论如何都无法正常工作。我觉得你在做什么的代码味道。如果加载文件失败不会导致程序混乱,通常应该使用load代替require