ValueError:解包python需要多于1个值

时间:2012-04-30 23:48:17

标签: python

我有一个现有的菜单,可以为您提供选项LDL应该加载文件的内容,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:解包需要多于1个值

为什么我会收到此错误?

4 个答案:

答案 0 :(得分:13)

这意味着packages.txt中有一条线,当你剥离空白并用逗号分割时,它不会给出正好三个部分。实际上,它似乎只提供了1个(“需要超过1个值来解压缩”),这表明有一条线根本没有逗号。

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

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

答案 1 :(得分:3)

此错误发生在

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

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

答案 2 :(得分:2)

line.split(',')返回一个元组。然后通过写:

un-pack 该元组
name,adult,child= line.split(',')

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

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

答案 3 :(得分:0)

如果要解决此问题而不增加额外的行和检查,一种解决方案是将拆分更改为以下内容:

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

这将静默忽略丢失的值,并且变量将为空。这意味着nameadultchild的值将被填充(如果存在),而在原始文件中没有则为空。出于所有意图和目的,请忽略变量garbage