二维文本地图生成器中'int'对象不可下标访问错误排查
解决读取高度图时的
'int' object is not subscriptable 错误 嘿,我来帮你搞定这个问题!你碰到的这个错误,说白了就是你在尝试对一个整数做“下标访问”(比如像列表那样用[0]取元素),但整数根本不支持这种操作。结合你的需求——把高度图的每一行转成heightarray里的独立子列表,大概率是你在处理每行数据时,不小心把整行数据变成了单个整数,或者在遍历层级上搞混了。
先看最常见的错误写法
比如你可能写了类似这样的代码:
heightarray = [] with open('my_heightmap.txt', 'r') as f: for line in f: # 错误:直接把整行转成了单个整数,而不是拆分每行的每个数值 row = int(line.strip()) heightarray.append(row) # 之后尝试访问 heightarray[0][0] 就会报错,因为 heightarray[0] 是个整数
这里的问题很明显:你把每行文本直接转成了一个整数,所以heightarray里存的都是单个整数,不是列表。当你想按二维数组的方式访问heightarray[i][j]时,自然会触发“整数不能下标访问”的错误。
正确的实现方式
假设你的my_heightmap.txt里每行是用空格(或逗号)分隔的数值,比如:
12 15 18 20 10 11 13 16 8 9 14 17
你需要把每行拆分成单个数值,再转成整数组成子列表,最后加入二维数组:
heightarray = [] with open('my_heightmap.txt', 'r') as f: for line in f: # 先去掉换行符和首尾空格,再按空格拆分每行的数值字符串 # 如果你的分隔符是逗号,就改成 line.strip().split(',') num_strings = line.strip().split() # 把每个字符串转成整数,组成当前行的列表 current_row = [int(num) for num in num_strings] # 将行列表加入二维数组 heightarray.append(current_row) # 测试一下:访问第二行第三个元素(索引从0开始) print(heightarray[1][2]) # 输出13,完全正常
其他可能的出错场景排查
如果上面的代码还是有问题,你可以检查这几点:
- 文件格式问题:有没有某行只有一个数值?或者某行的分隔符和其他行不一样(比如有的行用空格,有的用逗号)?
- 空行处理:如果文件里有空行,
num_strings会是空列表,这时候转int会报错。你可以加个判断跳过空行:if not num_strings: continue # 跳过空行 - 变量赋值错误:有没有不小心把
current_row赋值成了单个整数?比如误写了current_row = int(num_strings[0]),而不是遍历所有数值。
内容的提问来源于stack exchange,提问作者Daniel Manzi
相关产品推荐
相关产品推荐

