GUIzero报'int' object is not subscriptable错误 强制转字符串仍未解决
错误产生原因
- 你初始化
leaderboard_array的写法得到的是一维数组,而非预期的二维数组。["***", 0] * 5会直接将列表内的元素重复5次,最终生成的结构为["***", 0, "***", 0, "***", 0, "***", 0, "***", 0] - 当代码执行
leaderboard_array[1]时,取到的元素是整数0,后续对这个整数执行[0]下标访问操作,就触发了'int' object is not subscriptable的类型错误,和字符串强制转换逻辑无关。
修复方法
第一步:修正二维数组初始化逻辑
将数组初始化代码改为列表推导式写法,生成包含5个二元子列表的二维数组:
leaderboard_array = [["***", 0] for _ in range(5)]
注意不要用
[["***", 0]] * 5的写法,这种写法会生成5个指向同一块内存的子列表,修改任意一个子列表的元素都会同步修改所有子列表,出现预期外的问题。
第二步(可选):简化重复的控件生成逻辑
你可以用循环批量生成Text控件,避免写5段重复代码:
leaderboard_array = [["***", 0] for _ in range(5)] # 用列表存储所有Text控件,后续修改值也可以直接通过下标操作 leaderboard_boxes = [] for i in range(5): box = Text(leaderboard_window) box.value = f"{leaderboard_array[i][0]}: {leaderboard_array[i][1]}" leaderboard_boxes.append(box)
这里用了Python f-string格式化字符串,不需要手动嵌套多层
str()转换,语法更简洁。
内容的提问来源于stack exchange,提问作者Let A be the Unknown
相关产品推荐
相关产品推荐

