Pythonのtracebackモジュールで例外情報をファイルに記録する方法

この記事では、Pythonプログラムでハンドルされなかった例外が発生した際に表示されるトレースバック情報を、tracebackモジュールを使って文字列として取得し、ログファイルなどに記録する方法を解説します。


目次

トレースバックとは

Pythonプログラムがエラーでクラッシュすると、エラーが発生するまでの関数呼び出しの履歴がコンソールに表示されます。この履歴がトレースバック(またはスタックトレース)です。

トレースバックには、エラーが発生したファイル名、行番号、関数名、そして例外の種類とメッセージが含まれており、デバッグのための重要な手がかりとなります。

def function_a():
    function_b()

def function_b():
    # ここで意図的に例外を発生させる
    raise Exception("これは意図的なエラーメッセージです。")

# function_a() # この関数を呼び出すとコンソールにトレースバックが表示される

このコードを実行すると、function_afunction_bを呼び出し、function_bで例外が発生した、という一連の流れがトレースバックとして出力されます。


traceback.format_exc()でトレースバックを文字列として取得する

tracebackモジュールのformat_exc()関数は、try...except文のexceptブロック内で呼び出すことで、発生した例外のトレースバック情報を整形された文字列として返します

これにより、プログラムをクラッシュさせる代わりに例外を捕捉し、その詳細なデバッグ情報をファイルに書き出したり、ログシステムに送信したりすることが可能になります。


トレースバック情報をファイルに記録する

以下は、try...exceptブロックで例外を捕捉し、traceback.format_exc()を使ってそのトレースバック情報をテキストファイルに保存する実用的な例です。

import traceback

try:
    # 意図的に例外を発生させる
    raise Exception("データ処理中に問題が発生しました。")
except:
    # 'error_log.txt'というファイルを書き込みモードで開く
    # with文を使い、ファイルの自動クローズを保証する
    with open('error_log.txt', 'w', encoding='utf-8') as error_file:
        # traceback.format_exc()でトレースバック文字列を取得し、ファイルに書き込む
        error_info_string = traceback.format_exc()
        error_file.write(error_info_string)
    
    print("トレースバック情報をerror_log.txtに書き込みました。")

このスクリプトを実行すると、カレントディレクトリにerror_log.txtというファイルが作成され、その中にはコンソールに表示されるのと同様の、詳細なトレースバック情報が記録されます。

error_log.txtのファイル内容の例:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
Exception: データ処理中に問題が発生しました。

まとめ

traceback.format_exc()関数は、プログラムの堅牢性を高めるための重要なツールです。try...except文と組み合わせることで、プログラムが予期せぬエラーで停止するのを防ぎつつ、デバッグに必要な詳細なトレースバック情報を文字列として取得し、ファイルなどに永続的に記録することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次