2009-04-29 10 views
5

अजगर में वहाँ हमेशा अपवाद को बढ़ाने के लिए भले ही अपवाद अपमानजनक कोड नहीं/एक कोशिश के अंदर है ब्लॉक को छोड़कर अजगर दुभाषिया के लिए मजबूर करने के लिए किसी भी भाषा (या दुभाषिया) सुविधा है?पायथन - ब्लॉक को छोड़कर/कोशिश किए बिना अपवादों को बढ़ाने के लिए मजबूर होना संभव है?

मैं सिर्फ अजगर में लिखा एक बड़ा और पुराने codebase, जिसका उद्देश्य कुछ कस्टम डिजाइन हार्डवेयर हम भी विकसित के साथ संवाद करने के लिए है विरासत में मिला है। कई संचार त्रुटियों और समय समाप्ति नकाबपोश किया जा रहा है/याद कोड की निम्न (सरलीकृत) पैटर्न के कारण:

try: 
    serialport.write(MSG) 
except: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    #or just: 
    #pass 

आदेश "सिर्फ खरोंच से पूरी बात को फिर से लिखने" के विशिष्ट परिदृश्य से बचने के लिए, मैं कर रहा हूँ वर्तमान में सभी अपवाद त्रुटियों/टाइमआउट को ठीक करने का प्रयास कर रहा है। मैं इसे एक ही समय में सभी अपवाद हैंडलिंग कोड हाथ से अक्षम करके कर रहा हूं।

+1

मैं, अजगर से बात नहीं कर सकते हैं के बाद से मैं इसका इस्तेमाल कभी नहीं किया है (इसलिए कारण है कि मैं एक असली जवाब के बजाय एक टिप्पणी के रूप में जवाब देने के), लेकिन सबसे डिबगर "सभी अपवादों पर तोड़" के लिए एक विकल्प है। इसे "प्रथम मौका अपवाद" भी कहा जा सकता है। यह आपके कोड को अपरिवर्तित रहने की अनुमति देगा, लेकिन ब्रेकपॉइंट की तरह हर "फेंक" का इलाज करता है। यह देखने के लिए जांचें कि क्या आपके डीबगर में यह सुविधा है। – rmeador

उत्तर

11

"सभी अपवाद" except: ब्लॉक एक उल्लेखनीय बुरी बात है और बस पाया और हैंडलिंग छोड़कर समझदार के साथ प्रतिस्थापित किया जाना चाहिए।

इस मामले में grep आपका मित्र है। एक अच्छा आईडीई इन अप्रिय कामों को प्रबंधित करने में मदद कर सकता है।

लेकिन पाइथन में "कोड के रूप में कोड को अनदेखा नहीं किया गया" विकल्प नहीं है।

+1

+1 "लिखित रूप में कोड को अनदेखा करें" :-) –

+1

पाइपर्सिंग कोड परिवर्तन करने के लिए एक उपयोगी टूल है। –

-2

आप कई अपवादों को संभालने के लिए एकाधिक अपवाद हैंडलर का उपयोग कर सकते हैं।

try: 
    serialport.write(MSG) 
except Handler1: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    #or just: 
    #pass 
except Handler2: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not2() 
    #or just: 
    #pass 
3

नहीं, वास्तव में नहीं। आपका सबसे अच्छा शर्त अधिक कुछ इस तरह के कोड बदलने के लिए है:

try: 
    serialport.write(MSG) 
except: 
    some_logging_function_mostly_not_working_that_might_be_here_or_not() 
    raise 

यह सटीक अपवाद फिर से बढ़ा कर देगा। मुख्य बात यह है कि आप समझने की जरूरत है कि यदि सभी अपवादों प्रणाली से बाहर निकलें करने के लिए एक तरह से थे, तो आप (iterators एक StopIteration अपवाद बढ़ा) पाश के लिए एक का उपयोग करने के लिए सक्षम नहीं होगा है।

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

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