1. ホーム
  2. python

例外を発生させずに Python のスタックトレースを表示する

2023-09-20 09:45:47

質問

私のクラスのインスタンス変数の1つで何かが起こっています。私はその変数をプロパティにしたいのですが、それがアクセスされるたびに、その時点に至るすべてのコードのスタックトレースをプリントアウトしたいのです。例外が発生していないときにスタックトレースをプリントアウトするにはどうしたらいいのでしょうか?例外が発生した場合、次のようなことができるのは知っています。 traceback.format_tb(sys.exc_info()[2]) .

また、最初の数レベルはおそらくそれほど面白いものではないので、最後の3-4レベルのみを印刷することも有用でしょう。

どのように解決するのですか?

traceback.print_stack() :

>>> def f():
...   def g():
...     traceback.print_stack()
...   g()
...
>>> f()
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in f
  File "<stdin>", line 3, in g

編集 extract_stack で、スライスを取る(例えば stack[5:] で最初の5レベルを除外します)、そして format_list を使用して、印刷用のスタックトレースを取得します ( '\n'.join(traceback.format_list(...)) )