在Python中,如何从方法中打印当前调用堆栈(用于调试目的)。


当前回答

Inspect.stack()返回当前堆栈,而不是异常回溯:

import inspect
print inspect.stack()

有关log_stack实用函数,请参阅https://gist.github.com/FredLoney/5454553。

其他回答

下面是一个通过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()获取它可以让你对它做任何你喜欢的事情。

import traceback
traceback.print_stack()

Inspect.stack()返回当前堆栈,而不是异常回溯:

import inspect
print inspect.stack()

有关log_stack实用函数,请参阅https://gist.github.com/FredLoney/5454553。

如果您使用python调试器,不仅可以交互式探测变量,还可以使用“where”命令或“w”获取调用堆栈。

在程序的顶部

import pdb

然后在代码中查看发生了什么

pdb.set_trace()

然后你就进入了提示符

对于那些在使用pdb时需要打印调用堆栈的人,就这样做吧

(Pdb) where