开发pygame数独项目触发NameError: name 'valid' is not defined如何解决?
报错产生原因
- 核心原因是Python在当前可访问的作用域内找不到名为
valid的函数定义,触发了命名错误 - 常见场景有两种:
- 你完全没有实现用来校验数独填入值合法性的
valid函数 - 你把
valid定义为所属类的成员方法,但调用时没有加self.前缀,Python只会在全局作用域查找对应函数,最终查找失败
- 你完全没有实现用来校验数独填入值合法性的
修复方案
方案1:补充实现valid全局函数
如果原本就没写该函数,直接在调用代码的同级作用域添加如下实现即可:
def valid(model, num, pos): # 校验同一行无重复值 for col in range(len(model[0])): if model[pos[0]][col] == num and pos[1] != col: return False # 校验同一列无重复值 for row in range(len(model)): if model[row][pos[1]] == num and pos[0] != row: return False # 校验同3*3宫格无重复值 box_x = pos[1] // 3 box_y = pos[0] // 3 for row in range(box_y * 3, box_y * 3 + 3): for col in range(box_x * 3, box_x * 3 + 3): if model[row][col] == num and (row, col) != pos: return False return True
方案2:修正类成员方法的调用方式
如果valid已经是当前类的成员方法,只需要修改调用语句,添加self.前缀即可,修改后的代码片段如下:
if self.valid(self.model, val, (row,col)) and solve(self.model): return True else: self.cubes[row][col].set(0) self.cubes[row][col].set_temp(0) self.update_model() return False
内容的提问来源于stack exchange,提问作者yugant gotmare
相关产品推荐
相关产品推荐

