स्वीकार किए गए उत्तर के टिप्पणी अनुभाग में चर्चा की गई श्रीज़ेउस से प्रश्न का उत्तर देने के लिए, मैं इसका उपयोग एक संवादात्मक कंसोल में अनकहा अपवाद लॉग करने के लिए करता हूं (पाइक्रोम 2018-2019 के साथ परीक्षण किया गया)। मुझे पता चला sys.excepthookकि एक अजगर खोल में काम नहीं करता है इसलिए मैंने गहराई से देखा और पाया कि मैं sys.exc_infoइसके बजाय उपयोग कर सकता हूं । हालाँकि, sys.exc_infoइसके विपरीत कोई तर्क नहीं है sys.excepthookजो 3 तर्क लेता है।
यहां, मैं दोनों का उपयोग करता हूं sys.excepthookऔर sys.exc_infoएक इंटरैक्टिव कंसोल में एक अपवाद और रैपर फ़ंक्शन के साथ स्क्रिप्ट दोनों को लॉग करने के लिए। दोनों फ़ंक्शन के लिए एक हुक फ़ंक्शन संलग्न करने के लिए, मेरे पास दो अलग-अलग इंटरफेस हैं जो कि तर्क दिए गए हैं या नहीं।
यहाँ कोड है:
def log_exception(exctype, value, traceback):
logger.error("Uncaught exception occurred!",
exc_info=(exctype, value, traceback))
def attach_hook(hook_func, run_func):
def inner(*args, **kwargs):
if not (args or kwargs):
# This condition is for sys.exc_info
local_args = run_func()
hook_func(*local_args)
else:
# This condition is for sys.excepthook
hook_func(*args, **kwargs)
return run_func(*args, **kwargs)
return inner
sys.exc_info = attach_hook(log_exception, sys.exc_info)
sys.excepthook = attach_hook(log_exception, sys.excepthook)
लॉगिंग सेटअप gnu_lorien के उत्तर में पाया जा सकता है।