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

Comments

“Python で例外が発生した場所を取得する” への1件のコメント

  1. […] Python で例外が発生した場所を取得する – HARD DAY'S NIGHT ブログwww.northwind.mydns.jp […]

コメントを残す

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