如何在pygame中使用csv文件数据?遇'int'对象不可下标报错
问题排查与解决方法
你遇到的TypeError: 'int' object is not subscriptable报错,是因为代码中对整数类型的变量使用了[索引]的下标访问方式,错误行total_level_width = len(data[0])*TILE_SIZE[0]有两个可能的错误来源,按优先级排查即可:
排查步骤
- 检查
TILE_SIZE的定义
代码中需要TILE_SIZE是包含宽、高两个值的序列(比如元组、列表),如果误把它定义为单个整数(例如TILE_SIZE = 32),访问TILE_SIZE[0]就会触发该报错。你可以在错误行之前添加打印代码确认:print(type(TILE_SIZE), TILE_SIZE) - 检查
data变量的结构是否被修改
你读取csv得到data后,先传给了World的构造函数,如果World类内部修改了传入的data变量(比如把二维列表转成了一维整数数组),那么执行完world = World(data)之后,data[0]就会变成整数,再取len(data[0])就会触发报错。你可以在world = World(data)之后添加打印代码确认:print(type(data[0]), data[0])
对应修复方案
- 如果是
TILE_SIZE定义错误,修改为二元序列即可,示例:
# 单个瓦片宽32像素,高32像素 TILE_SIZE = (32, 32)
- 如果是
World类修改了data结构,调整代码执行顺序,先计算关卡宽高再初始化World即可:
# 调整后顺序 f = open("Levels/level1.csv", "r") data = csv.reader(f) data = [row for row in data] f.close() # 先计算关卡宽高,再传入World构造函数 total_level_width = len(data[0])*TILE_SIZE[0] total_level_height = len(data)*TILE_SIZE[1] world = World(data) camera = Camera(Camera.camera_move, total_level_width, total_level_height) entities.add(player)
内容的提问来源于stack exchange,提问作者Sam Winkworth
相关产品推荐
相关产品推荐

