【问题标题】:Ruby ignores rescue ArgumentErrorRuby 忽略救援 ArgumentError
【发布时间】:2012-05-21 21:26:45
【问题描述】:

当我运行以下命令时,ArgumentError 似乎忽略了救援。 来自 Ruby 的 ArgumentError 错误消息出现在控制台上,但我的 puts 消息没有出现。 我尝试使用 TypeError 和 ZeroDivisionError 进行救援,并且成功了。

def divide(a, b)
    begin
        a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s
    rescue ArgumentError
        puts 'there must be two arguments'
    end 
end

divide(4)

【问题讨论】:

    标签: ruby rescue


    【解决方案1】:

    异常不是在函数内部抛出,而是在调用的地方抛出,所以需要在其他地方捕获:

    def divide(a, b)
      a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s
    end
    
    begin
      divide(4)
    rescue ArgumentError
      puts 'there must be two arguments'
    end
    

    虽然这有效,但捕获 ArgumentError 是一个非常糟糕的主意,因为它表明您的代码中存在错误,您不应该从中恢复。

    【讨论】:

    • @Kao:在这种情况下,请考虑通过点击旁边的勾选按钮来接受答案:)
    【解决方案2】:

    将针对这部分代码进行救援:a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s。你的异常不是在方法中触发的,而是在调用时触发的,如果你明白我的意思的话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2023-01-13
      • 2013-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多