迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

python 错误 RecursionError: maximum recursion depth exceeded

作者:迹忆客 最近更新:2022/07/26 浏览次数:

Python“RecursionError: maximum recursion depth exceeded”错误发生在函数被调用多次以致调用超过递归限制时。 要解决该错误,需要指定退出递归或设置更高递归限制必须满足的基本情况。

python RecursionError

下面是一个产生上述错误的示例。

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 循环中的条件不满足,所以我们退出循环。

如果我们无法准确跟踪错误发生的位置,请查看错误消息。

python RecursionError

上图显示错误发生在 example() 函数的第 6 行。

我们还可以看到错误发生在 main.py 文件中。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Django 中的 Slug

发布时间:2023/05/04 浏览次数:173 分类:Python

本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。

Django ALLOWED_HOSTS 介绍

发布时间:2023/05/04 浏览次数:181 分类:Python

本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。

Django 中的 Select_related 方法

发布时间:2023/05/04 浏览次数:129 分类:Python

本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。

在 Django 中上传媒体文件

发布时间:2023/05/04 浏览次数:198 分类:Python

在本文中,我们简要介绍了媒体文件以及如何在 Django 项目中操作媒体文件。

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 中进行多项选择。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便