我是Python的新手,我仍然不明白python中的堆栈回溯是什么?你能给我解释一下吗?非常感谢你的帮助!
发布于 2019-06-24 09:23:38
堆栈回溯显示调用堆栈在程序运行过程中的某个点的状态。在实践中,当程序中出现错误时,您通常会遇到这些问题。
call stack是堆栈帧的堆栈(或列表)。每个堆栈帧对应于一个子进程的调用(在Python中,是一个函数或列表理解)。堆栈是一种可以包含许多元素的数据结构,这些元素以后进先出(LIFO)的方式被删除。
这在抽象上可能很难理解,但是通过一个例子它是相当简单的。
示例:
如果你有这个程序:
def func1():
func2()
def func2():
print("func2")
调用函数func1
时,调用堆栈最初将包含func1
的调用框架。然后,func1
调用func2
,后者将一个调用帧添加到堆栈。当func2
退出时,相应的调用帧将从堆栈中删除,因此现在我们又回到了func1
。当func1
退出时,它的调用帧也会被移除,现在堆栈再次为空。
因此,我们将有以下堆栈跟踪:
[empty] --> func1 --> func1 --> func1 --> [empty]
func2
堆栈跟踪在调试中很有用,特别是在更复杂的示例中,因为它们显示了程序遇到错误时所在的位置。例如,如果我们修改func2
,使其如下所示:
def func2():
1 / 0
我们将获得一个具有以下堆栈回溯的ZeroDivisionError
:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in func1
File "<stdin>", line 2, in func2
ZeroDivisionError: division by zero
因此,我们可以看到错误发生在func2
的第2行(在func1
的第2行调用)。
https://stackoverflow.com/questions/56728788
复制相似问题