【问题标题】:Error handling when Exception / Error is thrown抛出异常/错误时的错误处理
【发布时间】:2016-09-29 20:48:11
【问题描述】:

我会尽量保持简短。

在 ruby​​ 中,如果抛出异常,返回另一个值的最佳方法是什么?我有空气制动通知我异常情况,但我不想阻止该过程继续进行。到目前为止,我有这样的事情:

house = House.find(1)
visitor_count = begin
                    house.visitors.count
                rescue => e
                    Airbrake.notify(e)
                    0
                end

想知道除了开始块之外是否还有其他方法可以执行此操作。谢谢!

【问题讨论】:

  • begin/rescue 是基本的错误处理机制。看来您的代码正在运行。
  • 它正在工作,但我想知道是否还有其他方法可以做同样的事情。
  • 请注意,这会挽救从StandardError 扩展的所有异常。我希望你这样做只是为了一个简单的例子。您应该永远盲目地挽救此类一般例外情况,而只挽救那些您真正期望发生的例外情况。

标签: ruby-on-rails ruby error-handling custom-errors airbrake


【解决方案1】:

您的解决方案(单独)很好。这是组织相同逻辑的另一种方式:

def num_house_visitors(id)
  House.find(id).visitors.count
rescue => e
  Airbrake.notify(e)
  0
end

我建议您首先尝试处理或防止发生异常情况:

house = House.find_by(id: id) # assuming Rails/ActiveRecord
house = Struct.new('MissingHouse', :visitors).new([]) if house.nil? # prevent nil errors

# House#visitors (and MissingHouse#visitors) always returns an array
vistor_count = house.visitors.count # this can't fail

【讨论】:

    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多