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

如何修复Python函数中UnboundLocalError:局部变量'i'未赋值即引用

修复Python函数中的UnboundLocalError错误

运行以下Python函数时出现错误:

"in checkValidMove
UnboundLocalError: local variable 'i' referenced before assignment"

错误出现在left = i + 1这一行,核心原因是当for循环未执行任何迭代时,变量i从未被赋值。比如当col=0时,第一个循环range(col-1, -1, -1)等价于range(-1, -1, -1),这个循环不会执行,后续引用i就会触发未绑定变量错误。


修复方案

在每个依赖循环后i值的代码前,先给i设置对应边界场景的默认值:

  • 向左遍历的循环前,初始化i = -1(对应col=0时,循环不执行,left = -1 +1 =0)
  • 向右遍历的循环前,初始化i = len(board[0])(对应col为最后一列时,循环不执行,right = len(board[0]) -1)
  • 向上遍历的循环前,初始化i = -1(对应row=0时,循环不执行,up = -1 +1 =0)
  • 向下遍历的循环前,初始化i = len(board)(对应row为最后一行时,循环不执行,down = len(board) -1)

修改后的完整代码

def checkValidMove(board, row, col, tile):
    # 检查当前位置是否可以放置tile
    # 先检查行
    i = -1  # 初始化i,处理col=0的边界情况
    for i in range(col -1, -1, -1):
        if board[row][i] == '.':
            break
    
    left = i + 1

    i = len(board[0])  # 初始化i,处理col为最后一列的边界情况
    for i in range(col + 1, len(board[0])):
        if board[row][i] == '.':
            break
    
    right = i - 1
    rowTotal = 0

    for i in range(left, right + 1):
        rowTotal += int(board[row][i])
    
    if not multipleOfFiveCheck(rowTotal + int(tile)):
        return False

    # 检查列
    i = -1  # 初始化i,处理row=0的边界情况
    for i in range(row -1, -1, -1):
        if board[i][col] == '.':
            break

    up = i + 1

    i = len(board)  # 初始化i,处理row为最后一行的边界情况
    for i in range(row + 1, len(board)):
        if board[i][col] == '.':
            break

    down = i - 1
    colTotal = 0

    for i in range(up, down + 1):
        colTotal += int(board[i][col])
    
    if not multipleOfFiveCheck(colTotal + int(tile)):
        return False
    
    return True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:05:22