拆分字符串ValueError:需要多于1个值才能解包

时间:2015-09-30 04:53:03

标签: python string

我正在尝试拆分字符串,我得到 ValueError:需要多于1个值来解压

我想我明白了,为什么会出现这种错误,这是因为没有价值可以拆分吗?

基本上我有for循环从xml返回字符串

for channel in tree.findall("channel"):
    title = channel.find('title').text
    channelname,tvguide = title.split("[")
    print(channelname,tvguide)

当我打印出标题时,我有这样的东西:

BeIN Sports 1HD [07:00 - 07:30] + 106.8 min Auto Mundial

BeIN Sports 2HD ValueError发生在这里?

BeIN Sports 3HD [23:00 - 02:00] + 1216.8 min Torino FC VS美国Citta di Palermo - 意大利联赛(意甲)

BeIN Sports 4HD ValueError发生在这里?

BeIN Sports 5HD [05:30 - 07:15] + 91.8分钟Olympique de Marseille VS Angers - 法国联赛1 2015 - 2016第7周

我的问题是,如何修复循环以便将所有标题拆分为channelname& tvguide即使一些字符串不包含tvguide?

例如,在没有tvguide的频道中(在本例中是BeIN Sports 2HD,BeIN Sports 4HD),它应该制作tvguide =" "或类似的东西。

任何想法的人?

2 个答案:

答案 0 :(得分:1)

为什么不使用split方法返回的列表,而不是单独尝试分配channelname和tvguide。

for channel in tree.findall("channel"):
    title = channel.find('title').text
    description = title.split("[")
    print description

这样你就不必担心频道是否有名字或tvguide,但要确保你在频道对象中得到一个字符串。

as Jon Clements suggested, we still need to figure out if its allowed to access description[1] and as he suggested an elegant way to do is str.partition

for channel in tree.findall("channel"):
    title = channel.find('title').text
    description = title.partition("[") # you get a tuple with three elements head, separator and tail. 
    #head is the portion before the separator, separator itself and tail the rest of the portion of the string
    print description

答案 1 :(得分:1)

您可以使用简单的if else

x="BeIN Sports 1HD [07:00 - 07:30] + 106.8 min Auto Mundial"

y="BeIN Sports 2H"
ll=[]
ll.append(x)
ll.append(y)
final = [(i,"") if "[" not in i else i.split("[") for i in ll]
print final

输出:[['BeIN Sports 1HD ', '07:00 - 07:30] + 106.8 min Auto Mundial'], ('BeIN Sports 2H', '')]

现在,您可以根据需要轻松处理列表中的这些元组。