2011-02-23 15 views
20

मैं कुछ इस तरह की तलाश में हूँ की अनदेखी करने के लिए है:कौन सा सबसे छोटा रास्ता चुपचाप एक रूबी अपवाद

begin 
    raise Exception 
rescue Exception 
end 
+0

यह सिर्फ परीक्षण के लिए है, इसलिए पूछ मेरी की अपनी भावना बचना का प्रस्ताव 'क्यों आप ऐसा करना चाहेगा?' :) – fguillen

उत्तर

22
def ignore_exception 
    begin 
    yield 
    rescue Exception 
    end 
end 
:

raise Exception rescue nil 

लेकिन सबसे छोटा रास्ता मैंने पाया यह है

अब आपको कोड

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

नोट (क्योंकि मैंने पहली बार गलत समझा): यह इस अर्थ में अपवाद को अनदेखा करता है कि बाकी के बाकी हिस्सों को छोड़ने के बाद सबकुछ जारी रहता है और अपवाद को बचाता है। यह * क्या नहीं करता है, इस अर्थ में अपवाद को पूरी तरह से अनदेखा कर देता है कि यह शुरू होता है और यह बचाव और बचाव के बीच क्या कर रहा था। स्वच्छ समाधान के लिए – cesoid

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

+0

+1 रेल के साथ महान काम करता है! – FloatingRock

+1

मैं 'मानक' के लिए 'अपवाद' को बदलने का सुझाव दूंगा क्योंकि ['अपवाद' को बचाने के लिए यह एक अच्छा अभ्यास नहीं है] (https://stackoverflow.com/questions/10048173/why-is-it-bad-style-to- -ए-में-माणिक बचाव-अपवाद)। – aelesbao

संबंधित मुद्दे