列表索引超出范围... :(

时间:2019-07-27 09:06:55

标签: python

我试图理解为什么“ if len(w) == 0: continue”是必要的,但我并不能真正理解它。 如果我说只看2个单词是否匹配wk 如果我说第一个字必须是'From'。 我不是说这个短语有0个以上的单词吗?

练习2:找出上面程序的哪一行仍然没有得到适当的保护。查看是否可以构造一个导致程序失败的文本文件,然后修改该程序,以使该行受到适当保护,并对其进行测试以确保它可以处理新的文本文件。

f = open ('mbox.txt')
wk = ['Sun', 'Mon', 'Tues', 'Wed', 'Thu', 'Fri', 'Sat']

for l in f :
    w = l.split()
    if len(w) == 0: continue #why is this necessary????


    if w[0] != ('From'): continue # si la primera palabra es un "from", pues pasa hacia delate

    if w[2]  in wk :
        print (w[2])

感谢您的帮助:)

2 个答案:

答案 0 :(得分:2)

请考虑以下几点:

  • 您不知道一行中有多少个单词。
  • 如果列表中至少有i个条目,则只能访问列表的第i个条目 该列表(否则您将获得索引超出范围的错误)。

因此,如果您要检查列表的第3个条目(即words[2])是否具有特定值,则必须首先确保该列表中至少有3个条目(即类似{{1 }}),然后才能检查该单词的值是否符合您的期望(即len(words) >= 3)。

答案 1 :(得分:-1)

当列表中没有第三个元素时,会发生这种情况。我不清楚您为什么要检查第三个元素(我假设它是第二个元素)。

您可以这样做:

'From'

现在,如果文件行中的第二个单词以wk开头并且第二个单词在 -id -name -parent_id 中可用,它将打印文件中的第二个单词。