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

二维文本地图生成器中'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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:16:16