2016年9月14日水曜日

Pythonのソースファイルの行番号を取得したい [ Python ]

Python3でコーディング中のデバッグ用やログ用に行番号を取得したくなった。
が!__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]を見るところがポイントですな。
うまくいった。めでたしめでたし。
でも、きちんとログに記録するようにするべきだな・・・

0 件のコメント:

コメントを投稿