2010-12-07 18 views
5

पाइथन में किसी भी खंड को छोड़कर आप एक अपवाद कैसे संभालेंगे?अपवाद में पायथन अपवाद

def safeLoopingCall(self, *args, **kwargs): 
    try: 
     self.loopingCall(*args, **kwargs) 
    except: 
     self.log.exception("exception in task") 

अगर लॉगर में कोई अपवाद होता है, तो हम बाहर हैं। इससे बचने के लिए सर्वोत्तम प्रथाएं क्या हैं? क्या आप ब्लॉक को छोड़कर एक और कोशिश को छोड़कर चारों ओर घूमते हैं (भयानक लगता है)? यह कार्य कभी भी किसी भी अपवाद का प्रचार नहीं करना चाहिए।

+2

आप किस लॉगर का उपयोग करते हैं? डिफ़ॉल्ट 'लॉगिंग' मॉड्यूल लॉगिंग के दौरान होने वाले अपवादों को निगलता है: http://docs.python.org/library/logging.html#exceptions-raised-during-logging – aeter

+1

वास्तव में। अपवादों को निगलने के लिए आपको logging.raiseExceptions = 0 निर्दिष्ट करने की आवश्यकता है। यह इस मामले के लिए काम करता है। धन्यवाद! – Tommy

उत्तर

5

आम तौर पर यह ब्लॉक को छोड़कर कैच-सब रखने के लिए अच्छा डिज़ाइन नहीं है, क्योंकि यह प्रोग्रामिंग त्रुटियों को मास्क कर सकता है। आईएमएचओ यही कारण है कि यह थोड़ा भयानक लग रहा है।

यदि आप वास्तव में कृपा से असफल होना चाहते हैं तो कोई फर्क नहीं पड़ता कि, फिर हां, खंड को छोड़कर एक घोंसले की कोशिश करें - लेकिन पूर्ण ट्रेसबैक लॉग करें, अन्यथा इसे डीबग करना वास्तव में कठिन हो सकता है।

0

FWIW, आप मेरे CausedException class पर एक नज़र डाल सकते हैं। शायद यह इस मामले में आपकी मदद कर सकता है; आपको दोनों अपवादों को पकड़ना होगा, उन्हें CausedException में लपेटें और फिर कारणों के रूप में उन दोनों के साथ एक CausedException को उठाया जाना चाहिए। इस तरह सभी शामिल स्टैक निशान डीबग संदेश में उपलब्ध होंगे।

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