首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python中的堆栈回溯是什么?

python中的堆栈回溯是什么?
EN

Stack Overflow用户
提问于 2019-06-24 09:05:36
回答 1查看 56关注 0票数 0

我是Python的新手,我仍然不明白python中的堆栈回溯是什么?你能给我解释一下吗?非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-24 09:23:38

堆栈回溯显示调用堆栈在程序运行过程中的某个点的状态。在实践中,当程序中出现错误时,您通常会遇到这些问题。

call stack是堆栈帧的堆栈(或列表)。每个堆栈帧对应于一个子进程的调用(在Python中,是一个函数或列表理解)。堆栈是一种可以包含许多元素的数据结构,这些元素以后进先出(LIFO)的方式被删除。

这在抽象上可能很难理解,但是通过一个例子它是相当简单的。

示例:

如果你有这个程序:

代码语言:javascript
复制
def func1():
    func2()

def func2():
    print("func2")

调用函数func1时,调用堆栈最初将包含func1的调用框架。然后,func1调用func2,后者将一个调用帧添加到堆栈。当func2退出时,相应的调用帧将从堆栈中删除,因此现在我们又回到了func1。当func1退出时,它的调用帧也会被移除,现在堆栈再次为空。

因此,我们将有以下堆栈跟踪:

代码语言:javascript
复制
[empty] --> func1 --> func1 --> func1 --> [empty]
                      func2

堆栈跟踪在调试中很有用,特别是在更复杂的示例中,因为它们显示了程序遇到错误时所在的位置。例如,如果我们修改func2,使其如下所示:

代码语言:javascript
复制
def func2():
    1 / 0

我们将获得一个具有以下堆栈回溯的ZeroDivisionError

代码语言:javascript
复制
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行调用)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56728788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档