gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:45:10 25 4
gpt4 key购买 nike

如果 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

但我仍然想知道,为什么最短的版本不起作用。

我找到了一些相关的问题,但没有一个提到 require 和 rescue 的问题:

我的问题:

我可以在 require 的单行条件下使用 rescue 吗?如果是:如何?如果不是:为什么?

最佳答案

在后缀/oneliner 表示法中使用rescue 时不能指定错误类。 rescue LoadErrorrescue ZeroDivisionError 的意思是它将拯救一个(子类)StandardError,在这种情况下,计算 LoadError ZeroDivisionError,这没有任何效果。由于 ZeroDivisionErrorStandardError 的子类,因此被捕获,而 LoadError 不是,因此没有被捕获。

顺便说一句,我想不出在所需文件不存在时不引发错误的用例。所需文件是依赖项,如果要求它们失败,则程序无论如何都无法正常运行。我觉得你在做什么有代码味。当加载文件失败不会扰乱程序时,这通常是您应该使用 load 而不是 require 的时候。

关于ruby - 使用带有 require/rescue 的单行条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com