Python终端图形代码意外触发IndexError索引越界错误该如何解决?
索引越界错误的原因及修复方案
问题1:rock数组索引越界
你定义的rock数组只有12个元素,合法索引范围是0~11,但代码中所有print语句都调用了rock[12],超出了数组最大索引:
# 原代码rock定义,共12个元素 rock = ["on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan","on_cyan"] # 但print语句中存在如下调用,索引12不存在 colored(ongroundls[31],"grey",rock[12])
修复方法:给rock数组增加1个元素,总长度改为13,适配13个调用位:
rock = ["on_cyan"] * 13
问题2:while循环逻辑错误导致索引越界
- 原代码中
pos - 1是无效计算,没有重新赋值给pos,会导致pos值固定,进入死循环,若初始pos超过ongroundls的最大索引31,就会持续触发越界错误。 - 代码中
pos == random是判断语句,并非赋值,且random是模块对象,不能直接赋值给pos变量,逻辑完全错误。
修复方法:修改while循环内的逻辑,同时限制pos的合法范围:
while pos > 19 and pos < len(ongroundls): # 增加边界判断,防止越界 ongroundls[pos] = "#" pos -= 1 # 正确赋值,pos递减 if pos == random.randrange(0, 32, 1): pos = random.randrange(20, 32) # 按需修改为你需要的随机pos范围,保证在0~31之间 # 保留原print逻辑
问题3:可选的边界校验增强
所有给列表赋值的位置前增加边界判断,避免后续修改参数时再次触发越界:
# 示例:给ongroundls赋值前校验 if 0 <= rannum < len(ongroundls): ongroundls[rannum] = "4"
内容的提问来源于stack exchange,提问作者HileyNoteson
相关产品推荐
相关产品推荐

