You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本出现IndexError: list assignment index out of range错误排查

解决IndexError: list assignment index out of range问题

嘿,我一眼就瞅出问题在哪了——你初始化的results列表只有1个元素([""]),但你在循环里用counter从0跑到103,试图给results[counter]赋值。当counter大于0的时候,列表里根本没这个索引位置,可不就触发IndexError了嘛!

再仔细捋了下你的代码逻辑,还有几个可以优化的点,刚好贴合你“提取数据、去重打印”的需求:

问题拆解

  1. 列表索引越界:用固定长度的列表接收动态单元格内容,逻辑完全不匹配;
  2. 循环嵌套冗余:外层的counter循环和内层遍历单元格的逻辑毫无关联,纯粹是多余的;
  3. 去重需求没落地:原代码没做去重处理,得补上;
  4. 空值处理缺失:如果单元格是空的,str(b)会把None转成字符串"None",容易被误判。

修正后的代码

import datetime, openpyxl, re

wb = openpyxl.load_workbook("..\\test.xlsx")
print(wb.sheetnames)
sh = wb["July"]

def values():
    # 用集合自动去重,比列表省事儿
    processed_results = set()
    # 直接遍历目标单元格区域
    for row in sh["B3":"I16"]:
        for cell in row:
            cell_value = cell.value
            # 跳过空单元格,避免处理成"None"
            if cell_value is None:
                continue
            # 去除数字和£符号
            cleaned_value = re.sub("[0-9]+", "", str(cell_value))
            cleaned_value = re.sub(r'[£]', "", cleaned_value)
            # 去掉前后空白,防止空格导致的重复
            cleaned_value = cleaned_value.strip()
            # 过滤不需要的内容
            excluded_values = {"Room", "None", "****", "Double Bed", ""}
            if cleaned_value not in excluded_values:
                processed_results.add(cleaned_value)
    # 打印去重后的结果
    for item in processed_results:
        print(item)

# 调用函数执行
values()

关键修改说明

  • 用集合去重:set()会自动忽略重复元素,完美适配你的去重需求;
  • 动态添加元素:去掉了多余的counter循环,直接遍历单元格,把符合条件的内容加入集合;
  • 空值处理:判断单元格值为None时直接跳过,避免无效处理;
  • 简洁的过滤逻辑:把要排除的内容放进集合,用not in判断,比一堆or清爽多了。

如果坚持想用列表而不是集合,那你应该用results.append(cleaned_value)来添加元素,而不是按索引赋值——毕竟你没法提前知道会有多少个有效结果。

内容的提问来源于stack exchange,提问作者OnurCay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:22:20