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”
,使代码更易于阅读和维护/升级。