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

Python递归函数报错:局部变量X_j赋值前被引用问题

错误原因
  • 局部变量赋值分支覆盖不全:X_j仅在if X[j] != X[j+1]的判断分支内被赋值,当触发else分支时,当前函数作用域内从未创建过X_j变量,执行到return X_j语句时就会触发「局部变量未赋值就引用」的错误。
  • 递归逻辑存在两处缺陷:一是else分支中写的loop(j+1)属于未定义函数(从逻辑判断是想递归调用batch本身);二是即便修正为递归调用batch,如果不接收递归的返回值,上层函数的X_j依然没有有效值,还是会触发报错。
修复方案

补全else分支的赋值逻辑,修正递归调用的笔误,保证所有执行路径下X_j都能被正确赋值即可,修复后的代码如下:

def batch(j):
    if X[j] != X[j+1]:
        X_j = X[0:j+2]
    else:
        # 递归向后查找第一个相邻值不等的位置,接收递归返回的切片
        X_j = batch(j+1)
    return X_j

逻辑验证:调用batch(1)时,j=1对应X[1]、X[2]值相等,进入else递归调用batch(2);j=2对应X[2](34705)和X[3](34711)不等,返回切片X[0:4],上层递归逐层接收返回值,最终得到预期的包含34701、34705、34705、34711的切片,不会再抛出变量引用错误。

内容的提问来源于stack exchange,提问作者TheFriendlyAsker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:54:23