使用CSV文件绘制维恩图时出现Python IndexError索引越界问题
错误原因分析
- 触发
IndexError的直接原因:遍历CSV行时,存在部分行经逗号分隔后元素数量不足3,尝试访问row[1]、row[2]时就会超出列表索引范围。常见诱因是CSV末尾存在空行、或者某一行的字段缺失。你贴出的CSV示例内容本身字段是完整的,大概率是文件保存时末尾多了空白行。 - 额外隐藏逻辑错误:
csv.reader读取的所有字段默认是字符串类型,你直接用row[1] == 1做判断,字符串和整数永远不相等,最终会导致两个集合为空,绘图失败。
修复方案
- 读取CSV时添加
skipinitialspace=True参数,自动去除逗号后的前导空格,避免读取的字段带多余空格 - 遍历行时先判断当前行的元素长度是否符合要求,过滤空行和异常行
- 将字段转换为整数后再做等值判断
修改后的核心函数代码如下:
def get_Sports(file_name): football=[] others=[] with open(file_name) as file: # 添加skipinitialspace去掉分隔符后的前导空格 reader = csv.reader(file, skipinitialspace=True) next(reader) for row in reader: # 过滤空行和字段不足的异常行,避免索引越界 if len(row) < 3: continue # 转成整数再做判断 if int(row[1]) == 1: football.append(row[0]) if int(row[2]) == 1: others.append(row[0]) return football, others
内容的提问来源于stack exchange,提问作者Jo.skid
相关产品推荐
相关产品推荐

