当我增加递归限制时,为什么回溯中的“重复”数量没有增加?

问题描述 投票:0回答:1

当我运行递归函数并且超出递归深度限制时,会显示以下错误:

Python 3.12.4+ (heads/3.12:99bc8589f0, Jul 27 2024, 11:20:07) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def f(): f()
... 
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  [Previous line repeated 996 more times]
RecursionError: maximum recursion depth exceeded

据我了解,因为回溯都是相同的

File "<stdin>", line 1, in f
,所以它没有显示全部内容(因为显然它并没有真正的帮助),只是告诉我这行代码重复了 996 次。 当我手动更改递归限制时,我预计回溯大小也会增加。但事实并非如此:

>>> sys.setrecursionlimit(2000)
>>> 
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  [Previous line repeated 997 more times]
RecursionError: maximum recursion depth exceeded

我将递归限制加倍,所以现在我预计回溯大小加倍,但它表示前一行重复了 997 次。为什么会这样?

注意

我还发现这个问题似乎与我的问题相同,但事实并非如此。我的问题具体是关于回溯的大小。

为什么增加递归深度会导致堆栈溢出错误?

python recursion traceback
1个回答
0
投票

我发现这与 sys.tracebacklimit 变量有关。它限制了回溯大小。

>>> def f(): f()
... 
>>> 
>>> import sys
>>> sys.setrecursionlimit(2000)
>>> 
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  [Previous line repeated 997 more times]
RecursionError: maximum recursion depth exceeded
>>> 
>>> sys.tracebacklimit = 1500
>>> 
>>> f()
Traceback (most recent call last):
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  File "<stdin>", line 1, in f
  [Previous line repeated 1497 more times]
RecursionError: maximum recursion depth exceeded
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.