में मैं एक लंबे चल विरासत गहरे लाल रंग का कार्यक्रम पारित किया गया था, जो इसे भरकैप्चर Ctrl-सी माणिक
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
के कई घटनाओं है।
हर एक संभावित अपवाद के इन प्रत्येक (कम से कम तुरंत नहीं) से निपटने के किया जा सकता है पर नज़र रखने के बिना, मैं अभी भी Ctrlसी साथ समय पर इसे बंद करने में सक्षम होना चाहते हैं।
और मैं एक तरह से जो केवल कोड में जोड़ता है (इसलिए मैं मौजूदा व्यवहार को प्रभावित नहीं है, या एक रन के बीच में एक अन्यथा पकड़ा अपवाद याद आती है।)
में ऐसा करना चाहते हैं [Ctrlसी सिगिनट, या सिस्टमएक्सिट है, जो रूबी के अपवाद हैंडलिंग सिस्टम में SignalException.new("INT")
के बराबर प्रतीत होता है। class SignalException < Exception
, जिसके कारण इस समस्या आ जाती है]
कोड रहा होगा लिखा है करना चाहते हैं:।
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
संपादित करें: इस कोड काम करता है, जब तक कि आप अपवाद के वर्ग मिल आप सही जाल करना चाहते हैं। यह या तो SystemExit, इंटरप्ट, या आईआरबी :: नीचे के रूप में निरस्त है।
वेन, क्या आप अपनी सूची में आईआरबी :: निरस्त उदाहरण जोड़ने के लिए बहुत दयालु होंगे? –
@ टिम, irb.rb (मेरे सिस्टम पर, यह /usr/lib/ruby/1.8/irb.rb में है) ढूंढें और मुख्य पाश ढूंढें (@ context.evaluate के लिए खोजें)। बचाव खंडों को देखें और मुझे लगता है कि आप समझेंगे कि आईआरबी इस तरह से व्यवहार क्यों कर रहा है। –
धन्यवाद। Irb.rb में #signal_handle की परिभाषा को देखते हुए मेरी समझ में भी मदद मिली। उनके मुख्य लूप के अपवाद परिवर्तनीय बाध्यकारी के भीतर भी एक साफ चाल है। (बचाव खंडों का उपयोग एक विशिष्ट अपवाद को चुनने के तरीके के रूप में करते हुए, फिर बचाव निकायों के बाहर उस अपवाद का उपयोग करना।) –