2011-06-20 7 views
5

संभव डुप्लिकेट:
Don't show Python raise-line in the exception stackट्रेसबैक में 'raise' के बिना अपवाद उठा रहे हैं?

NameError आदि जैसे अपवादों में निर्मित मुझे मेरे कोड में बिंदु जहां अपवाद घटित करने के लिए एक ट्रैस बैक दे। मैं एक यूटिलिटी मॉड्यूल पर काम कर रहा हूं और यह मुझे खराब करता है कि यदि मेरे मॉड्यूल का उपयोग करने वाला कोड अपवाद से पहले ट्रेसबैक में आखिरी चीज उठाता है और अपवाद करता है तो मेरा raise WhateverError है।

क्या पाइथन में अपवाद उठाने का कोई तरीका है और क्या ट्रैकबैक एक फ्रेम को अपर्याप्त अपवाद (सी कोड लिखने के बिना) बंद कर देता है?

उत्तर

3

शुद्ध पायथन मौजूदा ट्रेसबैक ऑब्जेक्ट्स को म्यूटेट करने या मनमाने ढंग से ट्रेसबैक ऑब्जेक्ट्स बनाने का तरीका प्रदान नहीं करता है।

>>> exc_info[2].tb_next = None 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: readonly attribute 

>>> types.TracebackType() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: cannot create 'traceback' instances 

ध्यान दें कि अगर यह ऐसा करना संभव थे तुम सिर्फ ट्रेस बैक की डिफ़ॉल्ट स्वरूपण को प्रभावित नहीं करेगा, आप भी लोगों की अपनी उपयोगिता मॉड्यूल में त्रुटियों-मार्टम पोस्ट करने के लिए pdb उपयोग करने की क्षमता के साथ हस्तक्षेप चाहते हैं।

यदि ट्रेसबैक लॉग इन किया जा रहा है या अन्यथा आपके उपयोगिता मॉड्यूल द्वारा स्वरूपित किया गया है तो आप केवल उन फ्रेमों को शामिल नहीं कर सकते हैं जिन्हें आप आउटपुट में रूचि रखते हैं। उदाहरण के लिए, मानक लाइब्रेरी का unittest मॉड्यूल परीक्षण चलाते समय होने वाली त्रुटियों की रिपोर्ट करते समय ऐसा करता है।

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