我有一个现有的菜单,可以为您提供选项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))
然而,当我尝试运行时,我收到错误:
name,adult,child = line.split(',')
ValueError:解包需要多于1个值
为什么我会收到此错误?
答案 0 :(得分:13)
这意味着packages.txt
中有一条线,当你剥离空白并用逗号分割时,它不会给出正好三个部分。实际上,它似乎只提供了1个(“需要超过1个值来解压缩”),这表明有一条线根本没有逗号。
也许packages.txt
中有空白或注释行?
您可能需要您的代码更聪明地解析文件的内容。
答案 1 :(得分:3)
此错误发生在
name,adult,child= line.split(',')
当您在左侧分配三个变量时,假设您在右侧有一个3元组。在此示例中,似乎line
没有逗号,因此line.split(',')
会导致列表中只包含一个字符串,因此错误“超过 1 值才能解包”。
答案 2 :(得分:2)
line.split(',')
返回一个元组。然后通过写:
name,adult,child= line.split(',')
如果元组没有正好三个元素,则解包失败。在您的情况下,错误消息表明您只有一个元素。所以,line.split(',')
显然只返回一个只有一个元素的元组。这意味着line
没有逗号。
这可能意味着您的输入数据不是您所期望的。您要求line
是一个包含三个逗号分隔值的字符串,但输入数据中有一行不符合该要求。
答案 3 :(得分:0)
如果要解决此问题而不增加额外的行和检查,一种解决方案是将拆分更改为以下内容:
name, adult, child, garbage = (line+',,,').split(',', maxsplit=3)
这将静默忽略丢失的值,并且变量将为空。这意味着name
,adult
和child
的值将被填充(如果存在),而在原始文件中没有则为空。出于所有意图和目的,请忽略变量garbage
。