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

448 投票
8 回答
262488 浏览
提问于 2025-04-15 13:02

在Python中,我该如何在一个方法里打印当前的调用栈(用于调试)呢?

8 个回答

105

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

(Pdb) where
154

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序根据不同的条件做出不同的反应。这就像在生活中,我们会根据天气决定穿什么衣服。如果天气冷,我们可能会穿上外套;如果天气热,我们就会穿短袖。

同样的道理,在代码里,我们可以使用“条件语句”来实现这个功能。条件语句就像是一个判断的工具,它会检查某个条件是否成立,然后根据这个条件来决定接下来要执行什么操作。

比如说,如果我们想要检查一个数字是否大于10,我们可以写一个条件语句来做这个判断。如果这个数字确实大于10,程序就会执行某个特定的操作;如果没有大于10,程序就会执行另一个操作。

这样一来,我们的程序就能根据不同的情况做出不同的反应,变得更加灵活和智能。

希望这个解释能帮助你理解条件语句的基本概念!

import traceback
traceback.print_stack()
498

这里有一个例子,教你怎么通过 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() 获取调用栈后,你可以随意处理它。

撰写回答