Aug 29, 2008

呼び出し元(Caller)の場所(行数)を特定したい

Pythonでprintデバッグをしていますが、すぐにどこに仕掛けたprintなのか忘れてしまう。
そこでDbgOutという関数を作ってみました。

def DbgPrint(obj, msg):
print "(dbg)%s >"msg + str(obj)

折角なので、沢山これを付けたときにどの行から呼び出されたDbgPrintなのか分かると、いい感じそうです。javascriptならこんなのがあった気がするんだけどと思ったらやはりPythonにもありました。sys._getfram関数がソレです。

これでとれるframeオブジェクトのf_lineoに行番号が入っています。
つまり
def DbgPrint(obj,msg):
print "(dbg L%d)%s >"%(msg, sys._getframe(1).f_lineo) + str(obj)
となります。
なかなか便利ですよ。

No comments: