2013-03-06 4 views
7

मैं पकड़ने और एक अपवाद (और इसी स्टैकट्रेस) ऐसा ही कुछ कर के बिना कार्यक्रम दुर्घटना होगा डंप कर सकते हैं:क्या पाइथन में प्रयास किए बिना प्रोग्राम के शीर्ष पर उठने के अपवाद पर प्रतिक्रिया करने का कोई तरीका है?

try: 
    # whole program 
except Execption as e: 
    dump(e) 
    raise 

कुछ समय एक बाहरी पुस्तकालय क्रैश, और मैं मर रहा अजगर पर प्रतिक्रिया करना चाहते हैं और ऐसा करने के कारणों को लॉग करें। मैं अपवाद को प्रोग्राम को दुर्घटनाग्रस्त होने से नहीं रोकना चाहता, मैं सिर्फ डीबग जानकारी चाहता हूं।

कुछ की तरह:

signals.register('dying', callback) 

def callback(context): 
    # dumping the exception and 
    # stack trace from here 

है कि संभव है?

उत्तर

12

हाँ, पंजीकरण से एक sys.excepthook() function:

import sys 

def myexcepthook(type, value, tb): 
    dump(type, value, tb) 

sys.excepthook = myexcepthook 

यह की जगह डिफ़ॉल्ट हुक, जो stderr को ट्रैस बैक बाहर प्रिंट करता है। इसे जब भी एक अपवाद अपवाद उठाया जाता है, और दुभाषिया बाहर निकलने वाला होता है।

आप अपने कस्टम हुक से मूल अपवाद हुक का पुन: उपयोग करना चाहते हैं, फोन sys.__excepthook__:

def myexcepthook(type, value, tb): 
    dump(type, value, tb) 
    sys.__excepthook__(type, value, tb) 
+0

मैं तुम्हे बहुत अभी प्यार करता हूँ। –

+0

आपका स्वागत है। :- डी –

+0

मैं सफलतापूर्वक (सी ++ से) PyObject_CallObject() के साथ एक फ़ंक्शन को कॉल कर सकता हूं, लेकिन यदि मैं जानबूझकर पैरामीटर की गलत संख्या भेजता हूं, तो यह शून्य हो जाएगा। मूल्य को वापस स्क्रिप्ट पर वापस करने के लिए मैं इस हुक का उपयोग कैसे कर सकता हूं? – Qwerty

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

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