list index out of range. 请用中文详细解释并给出多段修复代码示例,回答尽量详尽完整一些。

2026年06月03日 07:07 processing

错误信息

IndexError: list index out of range. 请用中文详细解释并给出多段修复代码示例,回答尽量详尽完整一些。

AI 解决方案

🔍 错误翻译

原文IndexError: list index out of range
译文索引错误:列表索引超出范围

🎯 原因分析

该错误表示尝试访问列表(或元组等序列)中不存在的索引位置。Python列表索引从0开始,当尝试访问的索引值大于等于列表长度为负数且绝对值超过列表长度时,就会抛出此错误。

常见触发场景

  • 遍历列表时循环条件错误,超出有效索引范围

  • 直接通过硬编码索引访问列表元素,但未考虑列表为空或长度不足的情况

  • 从其他数据源获取的索引值,未做边界校验就用于列表访问

  • 负索引使用不当,例如负索引的绝对值超过列表长度
  • 💡 解决方案

    以下通过不同场景展示修复代码示例,涵盖基础防御、动态索引校验、遍历安全访问等典型场景。

    场景1:直接索引访问时的空列表/越界防御

    问题代码:未判断列表长度,直接访问索引,可能因列表为空或长度不足触发错误

    my_list = [10, 20]
    # 当列表为空时,索引0会越界;若列表长度仅2,索引2也会越界
    print(my_list[2])
    

    修复代码:添加长度校验,确保索引在有效范围内

    my_list = [10, 20]
    target_index = 2
    
    # 核心修复:先校验索引是否在列表长度范围内
    if 0 <= target_index < len(my_list):
        print(my_list[target_index])
    else:
        print(f"错误:索引 {target_index} 超出列表范围(列表长度:{len(my_list)})")
    
    # 测试空列表场景
    empty_list = []
    if len(empty_list) > 0:
        print(empty_list[0])
    else:
        print("列表为空,无法访问索引0")
    

    场景2:循环遍历时动态索引越界修复

    问题代码:循环范围错误,例如误用range(len(my_list))导致索引超出实际有效范围

    data = ["苹果", "香蕉"]
    # 错误:循环范围写的是len(data)+1,导致最后索引为2,超出列表最大索引1
    for i in range(len(data) + 1):
        print(data[i])
    

    修复代码:确保循环索引范围严格匹配列表长度
    ```python
    data = ["苹果", "香蕉"]

    修复1