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

使用Python csv.reader()触发ValueError的问题咨询

问题分析与解决

你遇到的问题核心是CSV格式规范问题,以及csv.reader()的默认行为逻辑:

为什么会报错?

默认情况下,csv.reader()会把所有未被引号包裹的逗号当作字段分隔符。你的第一行数据Harry,Number Four, Privet Drive里有两个逗号,且没有用引号把包含逗号的字段括起来,所以csv.reader()会把这一行拆成3个元素:

["Harry", "Number Four", " Privet Drive"]

而你的代码里用name, home去解包每一行的元素,要求每行必须恰好2个元素,第一行拆出3个自然就触发ValueError。

怎么解决?

方案1:修正CSV文件(推荐)

按照CSV规范,包含分隔符(逗号)的字段需要用双引号包裹,把你的CSV改成:

Harry,"Number Four, Privet Drive"
Ron,The Burrow
Draco,Malfoy Manor

这样csv.reader()会把"Number Four, Privet Drive"识别为一个完整的字段,每行都会拆成2个元素,代码就能正常运行。

方案2:调整代码逻辑(临时应急用)

如果暂时无法修改CSV文件,可以放弃固定数量解包,改为动态处理每行元素:

import csv

students = []
with open("students.csv") as file:
    reader = csv.reader(file)
    for row in reader:
        name = row[0]
        home = ", ".join(row[1:])  # 把第一个元素之外的内容拼接成home
        students.append({"name": name, "home": home})

for student in sorted(students, key=lambda s: s["name"]):
    print(f'{student["name"]} is from {student["home"]}')

但这种方式依赖数据的固定结构,不如规范CSV格式可靠。

补充说明

csv.reader()的设计是遵循CSV标准,而非“自动忽略多余逗号”——它只会识别被引号包裹的逗号为字段内容的一部分,否则都会当作分隔符。这是CSV格式的通用规则,不是Python的特殊限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:52:19