2011-02-23 12 views
20

我正在尋找像這樣的最短途徑:這就是靜靜地忽略一個Ruby異常

raise Exception rescue nil 

但我已經找到了最短路徑是這樣的:

begin 
    raise Exception 
rescue Exception 
end 
+0

這只是爲了測試提出了不要這麼問我的你的感覺「你爲什麼要這麼做?」 :) – fguillen 2011-02-23 10:44:36

回答

22
def ignore_exception 
    begin 
    yield 
    rescue Exception 
    end 
end 

現在編寫代碼爲

ignore_exception { puts "Ignoring Exception"; raise Exception; puts "This is Ignored" } 
+1

注意(因爲我起初誤解了):這個「忽略」異常的意思是,在跳過開始和拯救異常之間的其餘任何事情之後,所有事情都會繼續。它不*做的是完全忽略了這樣一個例外,即它在開始和拯救之間繼續做它正在做的事情。 – cesoid 2017-03-14 15:48:07

8

只需將左側包裹在小括號中是:

(raise RuntimeError, "foo") rescue 'yahoo' 

注意,如果該異常是StandardError的其子類的救援只會發生。有關更多信息,請參閱http://ruby.runpaint.org/exceptions

20

這是通過提供的ActiveSupport:

suppress(Exception) do 
    # dangerous code here 
end 

http://api.rubyonrails.org/classes/Kernel.html#method-i-suppress

+1

+1爲乾淨的解決方案,但我更喜歡無依賴解決方案。 – fguillen 2013-10-01 10:54:10

+0

+1與Rails很好的結合! – FloatingRock 2014-07-29 10:32:12

+1

我建議將'StandardError'替換爲'Exception',因爲[這不是搶救'Exception'的好習慣](https://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-救援的異常-E-在旁註)。 – aelesbao 2017-07-03 13:07:01