knu*_*nut 3 ruby require rescue
如果a require
不成功,我想避免错误.
我可以这样做:
begin
require 'unexisting_script'
rescue LoadError
end
Run Code Online (Sandbox Code Playgroud)
我尝试用一行条件做同样的事情:
require 'unexisting_script' rescue LoadError
Run Code Online (Sandbox Code Playgroud)
并得到错误 no such file to load -- unexisting_script (LoadError)
使用其他异常/命令我对单行救援没有任何问题,这有效:
1 / 0 rescue ZeroDivisionError
Run Code Online (Sandbox Code Playgroud)
我也尝试将命令括起来,但是成功了:
(require 'unexisting_script') rescue LoadError
Run Code Online (Sandbox Code Playgroud)
我可以将所有内容放在一行中;
:
begin require 'unexisting_script'; rescue LoadError; end
Run Code Online (Sandbox Code Playgroud)
但我仍然在想,为什么最短的版本不起作用.
我发现了一些相关的问题,但没有一个提到需要和救援的问题:
我的问题:
我可以rescue
在一线条件下使用require
吗?如果是的话:怎么样?如果不是:为什么?
rescue
在postfix/oneliner表示法中使用时,不能指定错误类.什么rescue LoadError
或rescue ZeroDivisionError
意味着它将拯救(子类)StandardError
,在这种情况下,评估LoadError
或ZeroDivisionError
无效.由于它ZeroDivisionError
是一个子类StandardError
,它被捕获,但LoadError
不是,它没有被捕获.
顺便说一句,我想不出一个用例,当你不想在所需文件存在时不提出错误.必需的文件是依赖项,如果要求它们失败,那么程序无论如何都无法正常工作.我觉得你在做什么的代码味道.如果加载文件失败并不会导致程序混乱,那通常是应该使用load
而不是require
.