शुरुआत और अंत ब्लॉक के बिना रूबी में बचाव का उपयोग कैसे किया जाता है


115

मैं एक शुरुआती बचाव अंत होने की मानक तकनीक के बारे में जानता हूं

कैसे एक बचाव खंड का उपयोग करता है।

यह कैसे काम करता है और यह कैसे पता चलता है कि किस कोड की निगरानी की जा रही है?


जवाबों:


223

एक विधि "डीईएफ़" एक "शुरुआत" कथन के रूप में काम कर सकती है:

def foo
  ...
rescue
  ...
end

3
इसके अलावा, वर्ग परिभाषाएं, मॉड्यूल परिभाषाएं और (मुझे लगता है) do/ endब्लॉक शाब्दिक रूप में अंतर्निहित अपवाद ब्लॉक होते हैं।
जॉर्ग डब्ल्यू मित्तग

क्या आप बचाव को सुनिश्चित करने के साथ ही अंत भी कर सकते हैं?
मोहम्मद हाफिज

तुम पूरी तरह से बचाव को सुनिश्चित कर सकते हैं अंत के रूप में अच्छी तरह से :-)
एंटोनी

क्या आप अपने बचाव में एक से अधिक बचाव का उपयोग कर सकते हैं?
शादीजैन 875

@ marjane875 हाँ आप कई बचाव का उपयोग कर सकते हैं, या तो स्पष्ट रूप से (प्रत्येक बचाव खंड / अपनी लाइन पर ब्लॉक) जैसे rescue TypeError; rescue NameError- या आप कॉमा को अलग कर सकते हैं अपवाद कक्षाएं, जैसेrescue TypeError, NameError
केमट्यूरियन

48

आप इनलाइन बचाव भी कर सकते हैं:

1 + "str" rescue "EXCEPTION!"

बाहर प्रिंट होगा "अपवाद!" चूंकि 'स्ट्रिंग को फिक्सनम में ज़ब्त नहीं किया जा सकता'


1
आप बचाव कैसे करते हैं और अपवाद के पीछे इनलाइन दिखाते हैं?
सिरिल डचोन-डोरिस

वास्तविक अपवाद कैसे वापस करें?
user1735921

1
इनलाइन बचाव एक अच्छा अभ्यास नहीं है क्योंकि यह StandardErrorअपने सभी उपवर्गों को बचाता है , जैसे NameError- मतलब है कि आपके कोड में एक टाइपो भी एक त्रुटि नहीं बढ़ाएगा। विचार करें ।botbot/don-t-inline-rescue-in- देखें माणिक्य
ब्रूनोफेका

26

मैं ActiveRecord सत्यापन के साथ def / बचाव संयोजन का उपयोग कर रहा हूं:

def create
   @person = Person.new(params[:person])
   @person.save!
   redirect_to @person
rescue ActiveRecord::RecordInvalid
   render :action => :new
end

मुझे लगता है कि यह बहुत दुबला कोड है!


19

उदाहरण:

begin
  # something which might raise an exception
rescue SomeExceptionClass => some_variable
  # code that deals with some exception
ensure
  # ensure that this code always runs
end

यहाँ, defएक beginबयान के रूप में :

def
  # something which might raise an exception
rescue SomeExceptionClass => some_variable
  # code that deals with some exception
ensure
  # ensure that this code always runs
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.