2012-05-21 12 views
6

जब मैं निम्नलिखित चलाता हूं, तो ArgumentError के लिए बचाव को अनदेखा किया जाता है। रूबी से ArgumentError त्रुटि संदेश कंसोल पर दिखाई देता है, लेकिन मेरे रखता संदेश नहीं करता है। मैंने TypeError और ZeroDivisionError के साथ बचाव की कोशिश की, और यह काम किया।रूबी बचाव को अनदेखा करता है ArgumentError

def divide(a, b) 
    begin 
     a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s 
    rescue ArgumentError 
     puts 'there must be two arguments' 
    end 
end 

divide(4) 

उत्तर

8

अपवाद समारोह के अंदर फेंक दिया जाता है नहीं है, लेकिन बिंदु पर जहां यह कहा जाता है, तो आप इसे कहीं और पकड़ने के लिए की जरूरत है:

def divide(a, b) 
    a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s 
end 

begin 
    divide(4) 
rescue ArgumentError 
    puts 'there must be two arguments' 
end 

है कि काम करता है, को पकड़ने ArgumentError एक बहुत है बुरा विचार, क्योंकि यह आपके कोड में एक त्रुटि इंगित करता है जिसे आप से पुनर्प्राप्त नहीं कर पाएंगे।

+0

धन्यवाद। मैंने कार्यक्रम बदल दिया और अब यह उम्मीद के अनुसार काम करता है। –

+1

@ काओ: उस स्थिति में, कृपया पक्ष पर टिक बटन पर क्लिक करके एक उत्तर स्वीकार करने पर विचार करें :) –

1

बचाव कोड कोड के इस भाग के लिए किया जाएगा: a.to_s + ' divided by ' + b.to_s + ' is ' + (a/b).to_s। आपका अपवाद विधि में नहीं ट्रिगर किया गया है, लेकिन कॉलिंग-टाइम पर, यदि आप देखते हैं कि मेरा क्या मतलब है।

+0

मुझे यह मिल गया। धन्यवाद। –

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