gpt4 book ai didi

python - 递归错误 : maximum recursion depth exceeded in comparison

转载 作者:太空狗 更新时间:2023-10-29 20:22:20 27 4
gpt4 key购买 nike

我希望这不是重复的,如果是这样,我深表歉意,但是已经进行了一些谷歌搜索并查看了堆栈溢出,但目前还没有发现任何东西......

MCVE

我知道如果一个函数不断地调用自己,这不可能无限期地发生而不发生堆栈溢出,因此在一定限制后会引发错误。例如:

def foo():
return foo()

foo()

这会导致以下错误:

RecursionError: maximum recursion depth exceeded

但是,如果我编写如下函数:

def count(n):
if n == 0:
return 0
else:
return count(n-1)+1

count(1000)

我得到一个稍微不同的错误:

RecursionError: maximum recursion depth exceeded in comparison

问题

上述错误中的“比较”指的是什么。我想我要问的是这两种情况之间的区别是什么,这会导致两种不同的错误。

最佳答案

当引发RecursionError 时,python 解释器还可以为您提供导致错误的调用的上下文。这仅用于调试,提示您应该查看代码中的哪个位置以解决问题。

例如,请参阅此循环 str - 导致不同消息的调用设置:

>>> class A:
... def __str__(self):
... return str(self.parent)
>>> a = A()
>>> a.parent = a
>>> str(a)
RecursionError: maximum recursion depth exceeded while calling a Python object

the issue discussion 上没有关于此行为的文档其中引入了 RecursionError,但您可以只搜索 cpython 代码以查找 Py_EnterRecursiveCall 的出现.然后你可以看到根据错误发生的位置返回的实际上下文:

Py_EnterRecursiveCall(" while encoding a JSON object")
Py_EnterRecursiveCall(" while pickling an object")
Py_EnterRecursiveCall(" in __instancecheck__")
Py_EnterRecursiveCall(" in __subclasscheck__")
Py_EnterRecursiveCall(" in comparison")
Py_EnterRecursiveCall(" while getting the repr of an object")
Py_EnterRecursiveCall(" while getting the str of an object")
Py_EnterRecursiveCall(" while calling a Python object")
Py_EnterRecursiveCall("while processing _as_parameter_") # sic
# .. and some more that I might have missed

关于python - 递归错误 : maximum recursion depth exceeded in comparison,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52873067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com