明示的に処理されない限り、Python 例外はデフォルトでプログラムの標準エラー ストリーム (stderr) に出力されます。ただし、代わりにロギング モジュールを使用して、キャッチされない例外をログに記録することが望ましい場合もあります。
キャッチされない例外をログに記録する従来のアプローチは、例外ブロック内で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 中国語 Web サイトの他の関連記事を参照してください。