从Python代码中的方法打印当前的调用堆栈

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

以下是通过回溯模块获取堆栈并将其打印的示例:

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() 

或者打印到标准输出(如果想要保持redirect输出一起使用),使用:

 traceback.print_stack(file=sys.stdout) 

但通过traceback.format_stack()获取它可以让你做任何你喜欢的事情。

 import traceback traceback.print_stack() 

inspect.stack()返回当前堆栈而不是exception追溯:

 import inspect print inspect.stack() 

请参阅https://gist.github.com/FredLoney/5454553获取log_stack实用程序函数。;

如果您使用pythondebugging器,不仅可以交互式探测variables,而且可以使用“where”命令或“w”获得调用堆栈。

所以在你的程序的顶部

 import pdb 

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

 pdb.set_trace() 

你会掉进提示符