呼び出し元(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)
となります。
なかなか便利ですよ。

Comments

Popular posts from this blog

Subclassing and Signal connect on a same widget crashes PySide application on exit.

Calling OpenCV functions via Cython from Python 3.X.

Showing CPU/Memory usage on tmux status bar(tmuxのステータスバーにCPUとMemoryの使用状況を表示する)