为何索引在范围内仍触发‘list index out of range’错误?
问题分析与解决
报错核心原因
- 单个元素长度不足:循环遍历
anime_series_list的每个item时,若某个item的元素个数少于3(比如只有2个元素),访问item[2]必然触发list index out of range。你验证的是horror在某个元素的索引2位置,但不代表所有item都具备3个元素。 - 逻辑结构错误:三个
if加else的写法存在问题,else仅与最后一个if绑定,只要最后一个条件不满足,就会输出无效提示并终止循环,哪怕前面的条件已经匹配成功。 - 打印对象错误:你打印的是
anime_series_list[0]/[1]/[2],这是列表的固定索引元素,而非当前匹配的item,逻辑完全偏离需求。
修正后的代码
genre = input('What genre do you feel like watching?\nhorror\npsychological horror\nadventure\naction\nEnter one of the genre seen above here: ') # 标记是否找到匹配项 found = False for item in anime_series_list: # 先检查当前item长度,避免索引越界 if len(item) >= 3: if item[0] == genre or item[1] == genre or item[2] == genre: print(''.join(item)) found = True # 可选:对长度不足的条目给出提示 else: print(f"警告:条目{item}元素数量不足,无法匹配全部索引") # 循环结束后统一处理无匹配的情况 if not found: print('INVALID OPTION')
关键修正点
- 索引安全检查:用
len(item)>=3确保访问item[2]前不会触发越界错误。 - 合并条件判断:用
or合并三个匹配条件,逻辑更简洁高效。 - 匹配状态标记:用
found变量记录是否找到匹配,循环结束后统一处理无效提示,避免中途错误终止循环。 - 打印正确对象:打印当前匹配的
item,而非列表的固定索引元素,符合需求逻辑。
内容的提问来源于stack exchange,提问作者Rick Sky
相关产品推荐
相关产品推荐

