Python程序的错误,有许多值需要解包


def main(data):
data = data.replace("n", " ")
data = data.lstrip("{ <% list")
data = data.strip(' %>}').strip().strip(';')
data = data.split(" <% list")
dictionary = {}
for line in data:
values, key = line.split("=:")
values = values.strip()
values = values.lstrip("(")
values = values.rstrip(")")
values = values.split(";")
values = list(map(lambda x: x.strip(), values))
key = key.strip()
dictionary[key] = values
return dictionary
print(main("{ <% list(cema_56; ator_218 ; lara_164 ; ator_370 )=: arenar; %> <% list( reer ;ina ; lebebi_345 ) =: usis_936; %> <% list(atan_207 ; enen)=: gelain_16; %><% list(ceonri_770; atso_148 ; eredre_533 )=: lace; %>}"))
----> 8         values, key = line.split("=:")
9         values = values.strip()
10         values = values.lstrip("(")
ValueError: too many values to unpack (expected 2)

从python文档

str.split()返回一个列表,并且您试图使用两个参数解包该列表,当列表有两个元素时它将工作,但当列表更小或更大时它将不起作用。

例如

x, y = [1] # wont work
x, y = [1, 2, 3] # wont work

你试过调试它吗?

print(line)
print(line.split("=:"))
values, key = line.split("=:")

你会发现并不是每一行都包含一个=:,所以line.split并不像你的代码要求的那样有两个结果。

你可以加上:

for line in data:
parts = line.split("=:")
if len(parts)!=2: continue
values, key = parts
values, key = line.split("=:")

从错误中可以相当清楚地看出,line.split("=:")分裂成一个包含两个以上项目的列表,因此解包失败。但是,您可以强制str.split只拆分一次

values, key = line.split("=:", 1)

最新更新