当使用 IDLE shell 3.9.1 运行脚本时(在 IDLE 中编码脚本,然后按 F5),Python 似乎允许比实际定义的限制更多的递归深度(默认 1000,这里是 20 以使其更容易), Win32 上的 Python 3.9.1(tags/v3.9.1:1e5d33e,2020 年 12 月 7 日,17:08:21)[MSC v.1927 64 位 (AMD64)](Windows 10 1909,内部版本 18363.1316)。
用代码:
import sys, inspect
sys.setrecursionlimit(20)
print("Recursion limit:", sys.getrecursionlimit()) #ouputs 20
recursionCounter = 0
def recursive():
global recursionCounter
recursionCounter += 1
print("stack:", len(inspect.stack())) #starts at 5 (IDLE is adding some nested loops) but stops at 36, higher than the recursion limit
recursive()
try:
recursive()
except RecursionError:
print("RecursionError raised. recursionCounter value is:" , recursionCounter) #outputs 33
Run Code Online (Sandbox Code Playgroud)
完整的输出是:
Recursion limit: 20
stack: 5
stack: 6
stack: 7
(...)
stack: 35
stack: 36
RecursionError raised. recursionCounter value is: 33
Run Code Online (Sandbox Code Playgroud)
与降低或增加限制相同,无论递归限制设置为多少,Python 都会比它更深入,超出它相同的量(此处为 13)。
我错过了递归限制或 RecursionError 是否有一些特殊的东西可以解释这种效果?