从代码中的方法打印当前调用堆栈
在 Python 中,如何从方法中打印当前的调用堆栈(用于调试目的)。
In Python, how can I print the current call stack from within a method (for debugging purposes).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
inspect.stack()
返回当前堆栈而不是异常回溯:请参阅 https: //gist.github.com/FredLoney/5454553 用于 log_stack 实用函数。
inspect.stack()
returns the current stack rather than the exception traceback:See https://gist.github.com/FredLoney/5454553 for a log_stack utility function.
如果您使用Python调试器,不仅可以交互式探测变量,还可以使用“where”命令或“w”获取调用堆栈。
因此,在程序的顶部
,然后在您想要查看正在发生的情况的代码中
,您会进入提示符
If you use python debugger, not only interactive probing of variables but you can get the call stack with the "where" command or "w".
So at the top of your program
Then in the code where you want to see what is happening
and you get dropped into a prompt
这是 @RichieHindle 的优秀答案的一个变体,它实现了一个装饰器,可以根据需要有选择地应用于函数。 适用于 Python 2.7.14 和 3.6.4。
样本输出:
Here's a variation of @RichieHindle's excellent answer which implements a decorator that can be selectively applied to functions as desired. Works with Python 2.7.14 and 3.6.4.
Output from sample:
安装Inspect-it
代码
您可以制作此行的片段
它将向您显示函数调用堆栈的列表
从开始到放置此行的位置的列表
Install Inspect-it
Code
you can Make a snippet of this line
it will show you a list of the function call stack with a filename and line number
list from start to where you put this line
使用
walk_stack
方法返回当前堆栈中存储的历史记录(None
):Use
walk_stack
method to return to the history stored in the current stack (None
):这是通过 traceback 模块获取堆栈并打印它的示例:
如果您真的只想将堆栈打印到 stderr,您可以使用:
或者打印到 stdout(如果想将重定向输出保持在一起很有用),使用:
但是通过
traceback.format_stack()
获取它可以让您做到无论你喜欢什么。Here's an example of getting the stack via the traceback module, and printing it:
If you really only want to print the stack to stderr, you can use:
Or to print to stdout (useful if want to keep redirected output together), use:
But getting it via
traceback.format_stack()
lets you do whatever you like with it.对于那些需要在使用 pdb 时打印调用堆栈的人,只需这样做
for those who need to print the call stack while using pdb, just do