ValueError:需要超过1个值才能解压缩python

ValueError:需要超过1个值才能解压缩python,python,Python,我有一个现有的菜单,可以为您提供选项L或DL应该加载文件的内容,而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

我有一个现有的菜单,可以为您提供选项
L
D
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))
但是,当我尝试运行此命令时,会出现以下错误:

姓名,成人,儿童=行。拆分(',')
ValueError:需要超过1个值才能解包


为什么会出现此错误?

此错误发生在

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

line.split(',')
返回元组。然后,通过编写以下命令来取消对该元组的打包:

name,adult,child= line.split(',')
如果元组没有三个元素,则取消打包失败。在您的情况下,错误消息表明您只有一个元素。因此,
line.split(',')
显然是返回一个只有一个元素的元组。这意味着,
没有逗号


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

这意味着
packages.txt
中有一行,当您去掉空格并在逗号上拆分时,该行不能精确给出三个字符。事实上,它似乎只给出了1个片段(“需要超过1个值才能解包”),这表明有一行根本没有逗号

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


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

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

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

这将自动忽略缺少的值,并且变量将为空。也就是说,
名称
成人
儿童
的值如果存在将被填充,如果原始文件中没有这些值,这些值将为空。出于所有目的,忽略变量
垃圾

少于或多于三个元素。这里有三个元素,你必须弄清楚为什么会这样。我们不知道为什么。我们所能做的就是告诉您,您的输入数据并不是您所期望的。那么您建议我应该怎么做?根据
line.Split(',')
的值将其拆分为不同的情况,尤其是输出的长度。如果你假设文件也有三个元素,你需要弄清楚为什么这一行没有。我修正了它,但是现在对于print((name),“-”,(成人),“/”,(儿童))它说变量“name”没有定义?是的。变量
name
仅在您指定的选项==“l”或选项==“l”
时设置。在另一种情况下,
option==“d”或option==“d”
,因此
name
将不在
globals()
中,当您尝试使用它时,将出现
name错误。如果您在其他地方设置了名称,则会在
成人
儿童
中出现名称错误。谢谢。我都修好了!现在它显示了一行.txt文件。我想让它显示多行。有没有办法做到这一点?好的,这是可行的,但是现在对于print((name),“-”,(成人),“/”,(儿童))来说,它是说变量“name”没有定义?为什么您希望在这里定义
name
?仅当选择了选项
L
时,才会设置该选项。您是否在D之前使用了L,从而使用了第二个块?仅供参考:您还可以说
option.upper()==“L”
,使代码更易于阅读和维护/升级。