今天写了一个Python脚本,运行过后发现提示RecursionError: maximum recursion depth exceeded 查询过相关文档和资料后才发现了问题原因,python的递归深度是有限制的
报错 RecursionError: maximum recursion depth exceeded while calling a Python object 2. 报错截图 3.
stdin>", line 3, in func File "<stdin>", line 3, in func [Previous line repeated 996 more times] RecursionError Python 解释器会自动限制递归的深度,当达到该极限值时,会引发 RecursionError 异常,如上所示。 stdin>", line 3, in func File "<stdin>", line 3, in func [Previous line repeated 196 more times] RecursionError
使用BeautifulSoup时,可能会抛出如下错误: RecursionError: maximum recursion depth exceeded while calling a Python object
RecursionError: maximum recursion depth exceeded #超过最大递归深度 这类递归被称为无穷递归(infinite recursion),理论上永远都不会结束 可以试试fact(1000),执行结果如下: RecursionError: maximum recursion depth exceeded in comparison 由执行结果看到,执行出现异常, fact(n,ret=1): if n==0: return ret return fact(n-1,ret=ret*n) print(fact(1000)) #输出 RecursionError
]] >>> a == b # 对比a和b Traceback (most recent call last): File "<stdin>", line 1, in <module> RecursionError memo) # Make sure x lives at least as long as d return y 在执行 == 操作时,因为a中存储了自身的引用,会无限的递归与b比较,从而造成RecursionError
__getattribute__(item) 执行后会抛出RecursionError异常。 RecursionError: maximum recursion depth exceeded while calling a Python object。 原因是self.
一个函数在函数体内部调用自己,这样的函数称为递归函数,递归的次数在python是有限制的,默认递归次数是997次,超过997次会报错:RecursionError. ? monkey(n - 1) + 1) * 2 print(monkey(10)) 计算结果:1534 二.递归函数使用需要注意的问题 1.一定要有结束条件 2.默认递归次数是997次,超过997次会报错:RecursionError
PermissionError ProcessLookupError TimeoutError ReferenceError RuntimeError NotImplementedError RecursionError
copy.deepcopy(x) >>> x == y Traceback (most recent call last): File "<stdin>", line 1, in <module> RecursionError x_copy True >>> x == x_deepcopy Traceback (most recent call last): File "<stdin>", line 1, in <module> RecursionError
(1), SystemError(2), ExceptionGroup( "group2",[ OSError(3), RecursionError OSErrors.") except* SystemError as e: print("ExceptionGroup -> There were SystemErrors.") except* RecursionError as e: print("RecursionError -> There were RecursionError # ExceptionGroup -> There were RecursionError. 3.1 异常注释 在一个异常被创建以引发时,它通常被初始化为描述所发生错误的信息,此时我们可以使用 ├── RuntimeError # 当检测到一个不归属于任何其他类别的错误时将被引发 │ ├── NotImplementedError │ └── RecursionError
python对于递归深度有默认的设置,当递归层数过深,超过1000时,会报错 RecursionError: maximum recursion depth exceeded while calling
4244200115309993198876969489421897548446236915:0.0 fibo3:4244200115309993198876969489421897548446236915:0.0 当n=380时,第二个函数由于递归深度过大而崩溃,抛出异常: RecursionError
三、解决使用pyinstaller打包程序时出现RecursionError 报错 RecursionError: maximum recursion depth exceeded 执行 pyinstaller
= B()print(b.A)print(b.a)---------------------------------------------------------------------------RecursionError __init__() 10 self.b = 'b' 11 print('init B')RecursionError: maximum recursion
这些数据会绕过预期的递归限制,最终耗尽Python的递归栈资源,引发 RecursionError,从而导致服务崩溃。
在这个例子中,我们故意遗漏了停止条件,以演示可能引发的RuntimeError(通常是RecursionError,它是RuntimeError的一个子类)。 可能会被抛出 # 但由于RuntimeError是RecursionError的基类,这个except块仍然会捕获它 print(f"Caught a RuntimeError # 然后捕获到RecursionError(作为RuntimeError的子类),并打印出错误信息, # 例如:“Caught a RuntimeError (or subclass): maximum 从 Python 3.5 开始,当递归深度超过解释器的限制时,通常会抛出 RecursionError 而不是 RuntimeError。 但是,由于 RecursionError 继承自 RuntimeError,因此使用 except RuntimeError 仍然可以捕获它。
. + n = func(n-1) + n ''' # RecursionError: maximum recursion depth exceeded # 这种方式无法跳出递归,所以在使用的时候就会无限递归下去 1000 也就是在Python中函数最多嵌套1000层 # 最大调用深度是为了保证系统性能的,否则无限递归下去,一会内存就满了 # 最大调用深度可以调整,可以调整到非常大的数字只要系统性能跟得上 # RecursionError = 1 else 1 # RecursionError: maximum recursion depth exceeded # 超出最大调用深度,没有明确的递归跳出条件 print(func1(100)
OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError
print ("孪生质数:"+str(a)+"----"+str(b)) 这里备注一下:python为了防止内存溢出,限制了递归的深度,所以直接求10000以内的还不行,会报错: RecursionError