अजगर के लिए सामान्य पकड़


86

मेरे पास कुछ बहुत ही अजीब व्यवहार है, जिसके परिणामस्वरूप चुप अपवाद हैं। मैं एक सामान्य प्रयास कैच कैसे लिख सकता हूं जहां मैं सभी अपवादों को डीबग कर सकता हूं। की तर्ज पर कुछ:

try:
    # something that fails
except e:
    print e

विस्तार से हाथ में समस्या के बारे में थोड़ा और अधिक:

मेरे पास एक Django ऐप है जो मेरे कंप्यूटर पर (उबंटू लिनक्स 8.10) रनस्वर और मॉड-पाइथन दोनों के माध्यम से ठीक काम करता है। तैनात सर्वर (उबंटू लिनक्स 8.10) पर यह रनसर के माध्यम से ठीक काम करता है, लेकिन मॉड-पाइथन में अपाचे के माध्यम से विफल हो जाता है।

मैंने बर्कले DB (bsddb.db), और द्वितीयक कुंजियों का उपयोग करने वाले ऐप के एक हिस्से को कारण को कम कर दिया है। द्वितीयक कुंजियों के लिए कॉलबैक विधि कुंजियों को प्रारूपित करने के लिए अचार का उपयोग करती है। जब मैं अचार को एक मूल्य पर कहता हूं तो यह विफल हो जाता है। हालाँकि, यह तभी विफल होता है जब मैं cPickle का उपयोग करता हूं, और कॉलबैक फ़ंक्शन के बाहर समान मूल्यों पर अचार का उपयोग करना भी काम करता है।

मैं बस यह जानना चाहता हूं कि यह cPickle के साथ विफल क्यों है।

जवाबों:


164

अपवाद कार्यक्रम समाप्ति से पहले ही डिफ़ॉल्ट रूप से मुद्रित हो जाते हैं। यदि आप त्रुटि कहीं और भेजना चाहते हैं (इसे प्रिंट नहीं करें) तो आप यह कर सकते हैं:

try:
    something()
except Exception as e:
    send_somewhere(traceback.format_exception(*sys.exc_info()))
    raise # reraises the exception

ध्यान दें कि asकीवर्ड का उपयोग करने वाला यह प्रारूप python> 2.6 के लिए है। पुराना तरीका था:

except Exception, e:

5
"अपवाद के रूप में ई" परिवर्तन के बारे में पता नहीं था। "अपवाद, ई" हमेशा मुझे खराब कर दिया, यह देखकर अच्छा लगा कि यह साफ हो गया।
१३

3
'के रूप में' कीवर्ड अजगर के लिए है = = 2.6
पिक्सेलबीटी

ऐसा सरल उपाय। फिर भी मैं हर दूसरे महीने इसे गूगल करता हूं, और शीर्ष लिंक पर क्लिक करता हूं और यहां समाप्त होता हूं।
नीक कैमल

3

ट्रैस बैक मॉड्यूल ट्रेस बैक फ़ॉर्मेट करने के लिए काफी उपयोगी है। फिर आप इसे लॉगफ़ाइल में लिख सकते हैं।


1

क्या यह काम करता है? :

except BaseException, e:

10
आपको पकड़ना नहीं चाहिए BaseException- इसमें शामिल हैं SystemExitऔर KeyboardInterrupt, ऐसी चीजें जिन्हें आप आमतौर पर नहीं पकड़ना चाहते हैं।
nosklo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.