ホームページ  >  記事  >  バックエンド開発  >  Python でキャッチされなかった例外を自動的にログに記録するにはどうすればよいですか?

Python でキャッチされなかった例外を自動的にログに記録するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-22 23:00:29300ブラウズ

How Can I Automatically Log Uncaught Exceptions in Python?

Python でキャッチされなかった例外をログに記録する

例外をキャッチして処理することは、Python でのエラー処理にとって重要です。ただし、標準エラー出力 (stderr) に出力されるキャッチされなかった例外についてはどうすればよいでしょうか?

カスタム例外処理

例外を明示的にキャッチして処理することは常に推奨されますが、場合によっては例外を明示的にキャッチして処理することもできます。キャッチされなかった例外のロギングを自動化すると便利です。 Try/Except ブロックに依存する代わりに、次の解決策により、ロギングが自動的に行われるようになります。

<code class="python">import sys
import logging

# Create a custom exception handler
def handle_exception(exc_type, exc_value, exc_traceback):
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    # Use the logging module to handle the uncaught exception
    logger = logging.getLogger(__name__)
    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

# Replace the default exception handler with our custom one
sys.excepthook = handle_exception

# Set up a logger and handler
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# Raise an exception to test the custom exception handling
if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>

説明

このコードは、いくつかのタスクを実行します。

  • 標準例外パラメータ (exc_type、exc_value、および exc_traceback) を受け取るカスタム例外ハンドラ関数 (handle_Exception) を作成します。
  • handle_Exception 内では、コードは KeyboardInterrupt 例外を無視します (そのため、Ctrl C を使用してプログラムを通常どおり終了できます) ).
  • キャッチされなかった例外は、ログ モジュールを使用して、カスタム メッセージ「キャッチされなかった例外」と例外の詳細とともにログに記録されます。
  • カスタム例外ハンドラーは、Python の例外ハンドラーを置き換えて、デフォルトの例外ハンドラーとして登録されます。標準エラー出力への出力のデフォルト動作。

このアプローチは、キャ​​ッチされなかった例外のロギングを自動化することにより、エラー処理を簡素化し、キャッチされたかどうかに関係なく、プログラムの実行中に発生するすべての例外を確認するための中央の場所を提供します。 .

以上がPython でキャッチされなかった例外を自動的にログに記録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。