除非明確處理,否則 Python 異常預設會輸出到程式的標準錯誤流 (stderr)。但是,在某些情況下,可能需要使用日誌記錄模組來記錄未捕獲的異常。
記錄未捕獲異常的傳統方法是在except 區塊中手動使用logging.exception(e) 方法,如下所示:
<code class="python">try: raise Exception, 'Throwing a boring exception' except Exception, e: logging.exception(e)</code>
但是,為每個未捕獲的異常自動呼叫logging.exception(...) 消除了手動步驟。
考慮以下程式碼片段:
<code class="python">import sys import logging # Custom logger with handler for stdout logger = logging.getLogger(__name__) handler = logging.StreamHandler(stream=sys.stdout) logger.addHandler(handler) # Custom exception handler to log uncaught exceptions def handle_exception(exc_type, exc_value, exc_traceback): # Ignore KeyboardInterrupt for Ctrl + C exit if issubclass(exc_type, KeyboardInterrupt): sys.__excepthook__(exc_type, exc_value, exc_traceback) return logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback)) # Assign custom exception handler sys.excepthook = handle_exception if __name__ == "__main__": raise RuntimeError("Test unhandled")</code>
此修改後的腳本完成了幾個關鍵任務:
透過使用 handle_exception 覆寫預設異常處理程序,將使用配置的記錄器自動記錄未捕獲的異常,從而增強可見性並促進偵錯。
以上是如何使用日誌模組記錄 Python 中未處理的異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!