【问题标题】:Catch a Ruby exception for logging, but don't throw it?捕获 Ruby 异常进行日志记录,但不要抛出它?
【发布时间】:2010-02-12 17:27:29
【问题描述】:

我好像脑子有病。我想在通过多个对象的循环期间捕获可能的 Ruby 异常,以便将其视为失败以便稍后显示,但我希望暂停执行;我希望它跳过不良记录并继续。我该怎么做?我不认为我可以使用retry,因为那样会再次尝试相同的记录,对吧?

【问题讨论】:

    标签: ruby exception-handling


    【解决方案1】:
    some_ary.each do |item|
      begin
        do_something_with item
      rescue Exception => e
        Logger.error "OH NO: #{e}"
      end
    end
    

    应继续执行,发现并记录错误。

    【讨论】:

    • 这是我的第一直觉,我已经尝试过了,但处理似乎仍然停止(当它处理接近 200 条记录时它几乎立即重定向)。我正在为 Rails 应用程序执行此操作,我认为这不会影响任何事情吗?
    • 在这种情况下,Wayne,听起来您可能会受益于编写一个简单的隔离脚本,以找出这在您的特定应用程序中不起作用的原因
    • @Wayne,您在什么级别发现异常?如果在循环之外,那么异常确实会停止循环。如果在循环内,正如@JoshL 在这里显示的那样,那么循环应该继续。
    【解决方案2】:

    不要“做”任何事情。如果您发现了异常并处理了它(通过将坏对象添加到列表或其他方式),请继续前进。伪代码:

    for each object foo
        try
            do something risky with foo
        catch
            badobjects.add(foo)
    

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 2014-04-27
      • 2020-02-13
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 2016-02-17
      相关资源
      最近更新 更多