python 错误 RecursionError: maximum recursion depth exceeded
Python“RecursionError: maximum recursion depth exceeded”错误发生在函数被调用多次以致调用超过递归限制时。 要解决该错误,需要指定退出递归或设置更高递归限制必须满足的基本情况。
下面是一个产生上述错误的示例。
def example():
example()
# ⛔️ RecursionError: maximum recursion depth exceeded
example()
我们调用该函数,然后该函数调用自身,直到超出递归限制。
我们可以使用 sys.getrecursionlimit()
方法获取当前递归限制的值。
import sys
# 👇️ 1000
print(sys.getrecursionlimit())
# 👇️ set recursion limit to 2000
sys.setrecursionlimit(2000)
# 👇️ 2000
print(sys.getrecursionlimit())
getrecursionlimit
方法返回 Python 解释器堆栈的最大深度。
如果需要更新此值,可以使用 setrecursionlimit
方法。
为了解决示例中的错误,我们必须指定函数停止调用自身的条件。
counter = 0
def example(num):
global counter
if num < 0:
return # 👈️ 这会阻止函数无休止地调用自己
counter += 1
example(num - 1)
example(3)
print(counter) # 👉️ 4
这次我们检查每次调用时是否使用小于 0 的数字调用函数。如果数字小于 0,我们只需从函数返回,这样就不会超过 Python 解释器堆栈的最大深度。如果传入的值不小于 0,我们调用传入的值减去 1 的函数,这使我们继续朝着满足 if 检查的情况前进。
递归函数调用自身,直到满足条件。 如果你的函数中没有条件要满足,它将调用自己,直到超过 Python 解释器堆栈的最大深度。
如果我们有一个在某处调用函数的无限循环,则也可能会收到此错误。
def do_math(a, b):
return a + b
while True:
result = do_math(10, 10)
print(result)
我们的 while 循环不断调用该函数,并且由于我们没有退出循环的条件,我们最终超出了解释器堆栈。
这与在没有基本条件的情况下调用自身的函数非常相似。
下面是一个示例,说明如何指定必须满足才能退出循环的条件。
def do_math(a, b):
return a + b
total = 0
i = 10
while i > 0:
total += do_math(5, 5)
i = i - 1
print(total) # 👉️ 100
如果 i 变量等于或小于 0,则 while 循环中的条件不满足,所以我们退出循环。
如果我们无法准确跟踪错误发生的位置,请查看错误消息。
上图显示错误发生在 example() 函数的第 6 行。
我们还可以看到错误发生在 main.py 文件中。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。