Python で現在のファイル名と行番号を調べる。

Python では、現在のファイル名を表す __file__ はあるけど、行番号を表す __line__ がない。現在の行番号を調べたかったら、スタックフレームオブジェクトを触る必要があるみたい。

以下がサンプルコード。__LINE__ and __FILE__ functionality in Python? - Python answers を参考に。

/tmp$ cat -n hoge.py
     1  import inspect
     2
     3  def location(depth=0):
     4      frame = inspect.currentframe(depth+1)
     5      return (frame.f_code.co_filename, frame.f_lineno)
     6
     7  if __name__ == '__main__':
     8      def f():
     9          g()
    10
    11      def g():
    12          print location()     #=> ('hoge.py', 12)
    13          print location(1)    #=> ('hoge.py', 9)
    14          print location(2)    #=> ('hoge.py', 17)
    15          print __file__       #=> hoge.py
    16
    17      f()
/tmp$ python hoge.py
('hoge.py', 12)
('hoge.py', 9)
('hoge.py', 17)