說我有這樣的事情,這將unhanded例外logging.critical()
:添加功能sys.excepthook
import sys
def register_handler():
orig_excepthook = sys.excepthook
def error_catcher(*exc_info):
import logging
log = logging.getLogger(__name__)
log.critical("Unhandled exception", exc_info=exc_info)
orig_excepthook(*exc_info)
sys.excepthook = error_catcher
它的工作原理:
import logging
logging.basicConfig()
register_handler()
undefined() # logs, then runs original excepthook
但是,如果register_handler()
被多次調用,多error_catcher
在一個鏈中被調用,並且日誌消息出現好幾次..
我能想到幾個方法,但沒有一個它們特別好(例如檢查sys.excepthook
是否爲error_catcher函數,或者在模塊上使用「have_registered」屬性以避免重複註冊)
是否有推薦的方法來執行此操作?
黑魔法的東西,但我喜歡它:) –