当我运行递归函数并且超出递归深度限制时,会显示以下错误:
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 次。为什么会这样?
我还发现这个问题似乎与我的问题相同,但事实并非如此。我的问题具体是关于回溯的大小。
我发现这与 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