9

我有一个现有的菜单,可以为您提供选项LD. L应该加载文件的内容并D显示它。

if option == "l" or option == "L":
    with open("packages.txt") as infp:
        for line in infp:
         line = line.rstrip()
         name,adult,child= line.split(',')

if option == "d" or option == "D":
    print ((name)," - ",(adult)," / ",(child))

但是,当我尝试运行它时,我得到了错误:

name,adult,child= line.split(',')
ValueError: need more than 1 value to unpack

为什么我会收到此错误?

4

4 回答 4

14

这意味着其中有一条线packages.txt,当您去除空格并以逗号分隔时,不会给出确切的三个部分。事实上,它似乎只给出了 1 件(“需要超过 1 个值才能解包”),这表明有一行根本没有逗号。

也许有空白或注释行packages.txt

您可能需要您的代码更智能地解析文件的内容。

于 2012-04-30T23:53:31.830 回答
3

此错误发生在

name,adult,child= line.split(',')

当您在左侧分配三个变量时,假设您在右侧有一个 3 元组。在此示例中,它似乎line没有逗号,因此导致列表中只有一个字符串,因此出现错误“要解压的值line.split(',')超过1 个”。

于 2012-04-30T23:50:44.557 回答
2

line.split(',')返回一个元组。然后,您可以通过以下方式解压缩该元组:

name,adult,child= line.split(',')

如果元组没有恰好三个元素,则解包失败。在您的情况下,错误消息指出您只有一个元素。所以,line.split(',')显然是返回一个只有一个元素的元组。这意味着line没有逗号。

可能这意味着您的输入数据不是您所期望的。您需要它line是一个包含三个逗号分隔值的字符串,但您的输入数据中有一行不符合该要求。

于 2012-04-30T23:52:10.877 回答
0

如果您想在不添加额外行和检查的情况下解决此问题,一种解决方案是将拆分更改为以下内容:

name, adult, child, garbage = (line+',,,').split(',', maxsplit=3)

这将默默地忽略缺失值,并且变量将为空。name意思是,adult和的值child如果存在则将被填充,如果原始文件没有它们,则将为空。出于所有意图和目的,请忽略变量garbage

于 2020-08-20T02:11:16.660 回答