2016-09-29 92 views
0

我會盡量保持簡短。異常/錯誤引發時的錯誤處理

在ruby中,如果引發異常,返回另一個值的最佳方法是什麼?我有空氣制動裝置來通知我這個例外,但我不想阻止這個過程繼續下去。到目前爲止,我有這樣的事情:

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

知道是否有反正比開始塊做到這一點其他的。謝謝!

+0

開始/救援的基本錯誤處理機制。它看起來像你的代碼工作。 –

+0

它正在工作,但我想知道是否有其他方法做同樣的事情。 – sclem72

+0

請注意,這可挽救* Standard * Error中擴展的所有*異常。我希望你只是爲了一個簡單的例子而做到這一點。你應該*永遠不要*一味地拯救這種一般的例外,只有那些你實際預計會發生的例外。 –

回答

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