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了嘛!
再仔细捋了下你的代码逻辑,还有几个可以优化的点,刚好贴合你“提取数据、去重打印”的需求:
问题拆解
- 列表索引越界:用固定长度的列表接收动态单元格内容,逻辑完全不匹配;
- 循环嵌套冗余:外层的
counter循环和内层遍历单元格的逻辑毫无关联,纯粹是多余的; - 去重需求没落地:原代码没做去重处理,得补上;
- 空值处理缺失:如果单元格是空的,
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
相关产品推荐
相关产品推荐

