355

Python では、メソッド内から現在のコール スタックを出力するにはどうすればよいですか (デバッグ目的で)。

4

7 に答える 7

398

tracebackモジュールを介してスタックを取得し、それを出力する例を次に示します。

import traceback

def f():
    g()

def g():
    for line in traceback.format_stack():
        print(line.strip())

f()

# Prints:
# File "so-stack.py", line 10, in <module>
#     f()
# File "so-stack.py", line 4, in f
#     g()
# File "so-stack.py", line 7, in g
#     for line in traceback.format_stack():

本当にスタックを stderr に出力したいだけなら、以下を使用できます:

traceback.print_stack()

または、stdout に出力するには (リダイレクトされた出力を一緒に保持したい場合に便利です)、次を使用します。

traceback.print_stack(file=sys.stdout)

しかし、それを取得すると、traceback.format_stack()好きなことを何でも行うことができます。

于 2009-07-20T21:27:43.907 に答える
119
import traceback
traceback.print_stack()
于 2009-07-20T21:28:14.013 に答える
55

inspect.stack()例外のトレースバックではなく、現在のスタックを返します。

import inspect
print inspect.stack()

log_stack ユーティリティ関数については、https: //gist.github.com/FredLoney/5454553を参照してください。

于 2013-04-24T19:37:20.370 に答える
19

Python デバッガーを使用すると、変数の対話的なプローブだけでなく、「where」コマンドまたは「w」でコール スタックを取得できます。

だからあなたのプログラムの一番上に

import pdb

次に、何が起こっているかを確認したいコードで

pdb.set_trace()

プロンプトにドロップされます

于 2016-10-23T20:47:36.447 に答える
2

インスペクト・イットをインストール

pip3 install inspect-it --user

コード

import inspect;print(*['\n\x1b[0;36;1m| \x1b[0;32;1m{:25}\x1b[0;36;1m| \x1b[0;35;1m{}'.format(str(x.function), x.filename+'\x1b[0;31;1m:'+str(x.lineno)+'\x1b[0m') for x in inspect.stack()])

この行のスニペットを作成できます

ファイル名と行番号を含む関数呼び出しスタックのリストが表示されます

最初からこの行を置く場所までのリスト

于 2019-07-05T05:49:43.200 に答える