Python で例外が発生した場所を取得する

python でプログラミング中、try ~ except で例外を補足しますが、どのコードでその例外が発生したかを特定する方法がわからなかったので調べました。

https://docs.python.org/ja/2.7/library/sys.html

sys.exc_info() で返されるレースバックオブジェクトに設定された現在の行番号 tb_lineno で、例外が発生したコードの行番号がわかります。

import sys, os

try:
    # リスト インデックス範囲外
    for link in navi[0]:
        ・・・(省略)・・・
except Exception as e:
    exc_type, exc_obj, exc_tb = sys.exc_info()
    fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
    print "%s, %s, %s" % (exc_type, fname, exc_tb.tb_lineno)

出力例:

<type 'exceptions.IndexError'>, 'test.py', 131

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください