Python运行报String Index out of range错误,已确认数组长度足够求排查
IndexError报错排查方案
错误原因
你的报错是由代码里的索引逻辑错误导致的:input_list[i][j] = input_line[i][j]这行的input_line[i][j]存在两处问题:
input_line是当前第i行按\t拆分后的列表,长度只有3,而变量i是遍历整个文件行的索引,当i≥3时,input_line[i]就已经超出了input_line的长度范围,会直接报错- 就算你修正为
input_line[j],当j≥3时也会超出input_line的长度(input_line只有3个元素,索引0、1、2),你初始化的input_list每个子元素长度为5,剩下的2个位置需要手动补充空值或者其他默认值
修复后可运行代码
# 推荐用with上下文管理器,自动处理文件关闭 with open("WSJ_02-21.pos-chunk", 'r', encoding='utf-8') as file: lines = file.readlines() input_list = [["" for _ in range(5)] for _ in range(len(lines))] for i in range(len(input_list)): input_line = lines[i].strip().split("\t") # 空行的情况处理 if not input_line or len(input_line) == 0: continue # 已经初始化全是空字符串,不需要再重复赋值 # 正常行有3个字段的情况 elif len(input_line) == 3: # 只遍历input_line的长度,避免越界 for j in range(len(input_line)): input_list[i][j] = input_line[j]
补充说明
如果后续需要对长度为5的子列表后两个位置做其他赋值,可以在上述循环结束后再单独处理对应索引即可。
内容的提问来源于stack exchange,提问作者Inigo Hohmeyer
相关产品推荐
相关产品推荐

