Python实现2048出现'NoneType object is not subscriptable'报错如何解决
报错原因与解决方法
NoneType object is not subscriptable 报错的本质是代码尝试对None值执行下标访问操作(比如x[i][j]但x实际为None),结合你提供的compress函数逻辑,常见的触发场景和排查方案如下:
- 场景1:传入
compress的参数mat本身为None
检查你调用compress前的上游代码,大概率是处理矩阵的前置函数没有正确返回计算后的矩阵,比如写了类似逻辑:
调用def handle_mat(mat): # 对mat做了一系列修改操作 # 漏写了return mat语句mat = handle_mat(mat)时会直接把mat赋值为None,再传入compress时执行mat[i][j]就会触发报错。 - 场景2:
compress函数的return语句缩进错误
你贴出的代码中return是正确和外层循环同级的,如果你实际运行的代码里不小心把return缩到了内层循环或者条件判断中,就会出现某些分支下函数没有返回值、默认返回None的情况,后续取返回值做下标访问就会报错。
快速排查技巧
可以在compress函数第一行加入打印代码确认入参状态:
def compress(mat): print("传入的mat值:", mat, "类型:", type(mat)) # 新增排查行 changed = False new_mat = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]] # 剩余原有代码不变
如果打印结果显示mat为None,直接向上溯源给mat赋值的逻辑即可;如果入参正常,检查return语句的缩进位置即可。
内容的提问来源于stack exchange,提问作者Striker
相关产品推荐
相关产品推荐

