我正在尋找像這樣的最短途徑:這就是靜靜地忽略一個Ruby異常
raise Exception rescue nil
但我已經找到了最短路徑是這樣的:
begin
raise Exception
rescue Exception
end
我正在尋找像這樣的最短途徑:這就是靜靜地忽略一個Ruby異常
raise Exception rescue nil
但我已經找到了最短路徑是這樣的:
begin
raise Exception
rescue Exception
end
def ignore_exception
begin
yield
rescue Exception
end
end
現在編寫代碼爲
ignore_exception { puts "Ignoring Exception"; raise Exception; puts "This is Ignored" }
注意(因爲我起初誤解了):這個「忽略」異常的意思是,在跳過開始和拯救異常之間的其餘任何事情之後,所有事情都會繼續。它不*做的是完全忽略了這樣一個例外,即它在開始和拯救之間繼續做它正在做的事情。 – cesoid 2017-03-14 15:48:07
只需將左側包裹在小括號中是:
(raise RuntimeError, "foo") rescue 'yahoo'
注意,如果該異常是StandardError的或其子類的救援只會發生。有關更多信息,請參閱http://ruby.runpaint.org/exceptions。
這是通過提供的ActiveSupport:
suppress(Exception) do
# dangerous code here
end
http://api.rubyonrails.org/classes/Kernel.html#method-i-suppress
+1爲乾淨的解決方案,但我更喜歡無依賴解決方案。 – fguillen 2013-10-01 10:54:10
+1與Rails很好的結合! – FloatingRock 2014-07-29 10:32:12
我建議將'StandardError'替換爲'Exception',因爲[這不是搶救'Exception'的好習慣](https://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-救援的異常-E-在旁註)。 – aelesbao 2017-07-03 13:07:01
這只是爲了測試提出了不要這麼問我的你的感覺「你爲什麼要這麼做?」 :) – fguillen 2011-02-23 10:44:36