Pythonのソースファイルの行番号を取得したい
Python3でコーディング中のデバッグ用やログ用に行番号を取得したくなった。
が!__LINE__みたいに簡単ではないようだ。
で、調べてみるとkなんとかの日記さんが情報を提供してくれているではないか、素晴らしい!!
早速使ってみると・・・
動かないぞ!!
ん??
どうやら、inspect.currentframe()は引数を取らないようだ・・・
バージョン違いなのだろうか・・・
したかないので、Pythonのドキュメントを見てみることにする。
inspectモジュールを使うことがわかったのでささっとみてみる。
inspect.getouterframes()が外側のフレームのリストを返してくれるらしい。
戻り値はFrameInfoの名前付きタプルにPython3.5で変更になったみたい。
で、こうなりました。
うまくいった。めでたしめでたし。
でも、きちんとログに記録するようにするべきだな・・・
が!__LINE__みたいに簡単ではないようだ。
で、調べてみるとkなんとかの日記さんが情報を提供してくれているではないか、素晴らしい!!
早速使ってみると・・・
動かないぞ!!
ん??
どうやら、inspect.currentframe()は引数を取らないようだ・・・
バージョン違いなのだろうか・・・
したかないので、Pythonのドキュメントを見てみることにする。
inspectモジュールを使うことがわかったのでささっとみてみる。
inspect.getouterframes()が外側のフレームのリストを返してくれるらしい。
戻り値はFrameInfoの名前付きタプルにPython3.5で変更になったみたい。
で、こうなりました。
def dprint(msg):
import inspect, os
curr = inspect.currentframe()
info = inspect.getouterframes(curr)[1]
print("[--DEBUG--] %s (%s:%d)" % (msg, os.path.basename(info.filename), info.lineno), flush=True)
この関数の呼び出し先の行番号が知りたいので、inspect.getouterframes()の戻り値リストの[1]を見るところがポイントですな。うまくいった。めでたしめでたし。
でも、きちんとログに記録するようにするべきだな・・・
コメント
コメントを投稿