如何修复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
相关产品推荐
相关产品推荐

