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 文件中。
相关文章
Pandas DataFrame DataFrame.shift() 函数
发布时间:2024/04/24 浏览次数:133 分类:Python
-
DataFrame.shift() 函数是将 DataFrame 的索引按指定的周期数进行移位。
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
Pandas read_csv()函数
发布时间:2024/04/24 浏览次数:254 分类:Python
-
Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。
Pandas 多列合并
发布时间:2024/04/24 浏览次数:628 分类:Python
-
本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。
Pandas loc vs iloc
发布时间:2024/04/24 浏览次数:837 分类:Python
-
本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串