1
# script.py  

greeting = "hi"
import inspect; import traceback; print traceback.format_stack(inspect.currentframe())[-1]
print greeting

スクリプトの 4 行目のコードは、ファイル名、行番号、および現在の行を出力します。

$ python script.py   
File "script.py", line 4, in <module>
    import inspect; import traceback; print traceback.format_stack(inspect.currentframe())[-1]
hi

print greetingしかし、現在の行の代わりに次の行 ( ) の行番号と内容を出力するにはどうすればよいでしょうか?

これはデバッグに便利で、その下の行のコードを表示するワンライナーです。

編集

ベンの答えを介して、私はこの恐ろしい生き物にたどり着きました:

import inspect; import sys; _lne = inspect.currentframe().f_lineno; print "{0}, line {1}:".format(__file__, _lne+1); print open(sys.argv[0]).readlines()[_lne].strip()

長さは 166 文字で、非常に冗長です。IndexError次の行がない場合はan が発生することに注意してください。

実行python script.pyすると、次のように出力されます

script.py, line 5:  
print greeting
hi

私が投稿した元の行の小さな変更が、これらを明示的に印刷する必要なしにファイル名と番号を含んでいたため、望ましい動作につながることを願っています。そして、それが提供するインデントも歓迎されませんでした.

4

4 に答える 4

1
import inspect; import sys ; print open(sys.argv[0]).readlines()[inspect.currentframe().f_lineno].strip()

これはおそらく有用ではありませんが。

于 2014-03-12T20:34:03.070 に答える
1

関連するファイル名と行を検索して出力するための小さなヘルパー関数を追加します。

import inspect, linecache

def show_next(cf):
    'Show the line following the active line in a stackframe'
    filename = cf.f_code.co_filename
    line = cf.f_lineno
    print linecache.getline(filename, line+1)


greeting = "hi"

show_next(inspect.currentframe())
print greeting

もちろん、必要に応じて、1 行にまとめることができます。

greeting = "hi"
import inspect, linecache; _f=inspect.currentframe(); print linecache.getline(_f.f_code.co_filename, _f.f_lineno+1)
print greeting
于 2014-03-12T20:38:30.873 に答える