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]を見るところがポイントですな。 うまくいった。めでたしめでたし。 でも、きちんとログに記録するようにするべきだな・・・ ふんどしの持ち主 kなんとかの日記 Pythonドキュメント
コメント
コメントを投稿