this questionから、私はエラーを1レベル下に処理しています。つまり、私は別のより大きな関数を呼び出す関数を呼び出し、より小さな関数ではなく、その大きな関数でどこが失敗したのかを求めます。具体例。コードは次のとおりです。例外が発生した場合、前のフレームのタイプ、ファイル、行番号を取得するにはどうすればよいですか?
import sys, os
def workerFunc():
return 4/0
def runTest():
try:
print workerFunc()
except:
ty,val,tb = sys.exc_info()
print "Error: %s,%s,%s" % (
ty.__name__,
os.path.split(tb.tb_frame.f_code.co_filename)[1],
tb.tb_lineno)
runTest()
出力は次のとおりです。
Error: ZeroDivisionError,tmp2.py,8
が、ライン8 ")(workerFuncを印刷" である - 私はその行が失敗したけど、私は前の行をしたい:
Error: ZeroDivisionError,tmp2.py,4