मैं एक लंबे समय तक चलने वाली रूबी कार्यक्रम पारित किया गया था, जिसमें कई घटनाएँ हैं
begin
#dosomething
rescue Exception => e
#halt the exception's progress
end
इसके दौरान।
हर एक संभावित अपवाद को ट्रैक किए बिना ये प्रत्येक को संभाल सकते हैं (कम से कम तुरंत नहीं), मैं अब भी इसे कई बार बंद करना चाहूंगा CtrlC।
और मैं ऐसा करना चाहता हूं जो केवल कोड में जोड़ता है (इसलिए मैं मौजूदा व्यवहार को प्रभावित नहीं करता हूं, या एक रन के बीच में अन्यथा पकड़े गए अपवाद को याद नहीं करता हूं।)
[ CtrlCSIGINT, या SystemExit है, जो SignalException.new("INT")
रूबी के अपवाद हैंडलिंग सिस्टम के बराबर प्रतीत होता है। class SignalException < Exception
, जिसके कारण यह समस्या सामने आती है।]
मेरे द्वारा लिखा गया कोड निम्न होगा:
begin
#dosomething
rescue SignalException => e
raise e
rescue Exception => e
#halt the exception's progress
end
EDIT: यह कोड तब तक काम करता है, जब तक कि आप उस अपवाद के वर्ग को प्राप्त नहीं कर लेते, जिसे आप सही तरीके से फंसाना चाहते हैं। यह या तो नीचे के रूप में SystemExit, Interrupt, या IRB :: Abort है।