You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何测量当前Python代码与递归限制的距离?

测量Python递归剩余深度的简洁方案

当然有更高效的方法,完全不需要触发RecursionError——核心就是获取当前递归深度,再和sys.getrecursionlimit()的结果相减,得到剩余可递归的次数。

具体实现方式

方式1:用sys._getframe()统计当前深度

CPython提供了sys._getframe()来获取当前执行的栈帧,通过遍历栈帧的f_back属性(指向调用者的栈帧),就能统计出当前的递归深度:

import sys

def get_current_recursion_depth():
    depth = 0
    frame = sys._getframe()
    while frame:
        depth += 1
        frame = frame.f_back
    return depth

# 计算剩余可递归次数
remaining_recursions = sys.getrecursionlimit() - get_current_recursion_depth()
print(f"剩余可递归次数: {remaining_recursions}")

方式2:用inspect模块(更具可读性)

如果觉得下划线开头的sys._getframe()不够“正式”,可以用inspect模块的currentframe()方法,逻辑完全一致:

import sys
import inspect

def get_current_recursion_depth():
    depth = 0
    frame = inspect.currentframe()
    while frame:
        depth += 1
        frame = frame.f_back
    return depth

remaining_recursions = sys.getrecursionlimit() - get_current_recursion_depth()
print(f"剩余可递归次数: {remaining_recursions}")

关键说明

  • sys._getframe()是CPython的私有API,但在所有主流CPython版本中都稳定可用,性能也比inspect方法略高一点。
  • 统计出的深度包含当前函数的栈帧,所以计算出的剩余次数是精确的——比如当前深度为5,递归限制是1000,那还能安全递归995次。
  • 绝对不要用“递归到触发异常”的方法,这种做法不仅低效,还会产生不必要的异常捕获开销,在递归限制较高时更是浪费系统资源。

内容的提问来源于stack exchange,提问作者Bill Evans at Mariposa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 21:04:58