初学者:索引错误 - 此代码有什么问题?

时间:2018-01-05 04:47:20

标签: python index-error

如上所述,我是初学者,我正在尝试做短期练习。不幸的是,我的在线辅导员无法或不愿意帮助我(继续建议其他方法)。

我的任务是检查该行的第一个单词是否为“From”,在这种情况下我需要打印下一个单词(电子邮件地址)。

例如,该文件包含一系列行,如下所示

From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008    
Return-Path: <postmaster@collab.sakaiproject.org>
Received: from murder (mail.umich.edu [141.211.14.90])  
by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA;
From louis@media.berkeley.edu Fri Jan  4 18:10:48 2008
Return-Path: <postmaster@collab.sakaiproject.org>
Received: from murder (mail.umich.edu [141.211.14.97])

代码应该带有以下输出:

stephen.marquard@uct.ac.za
louis@media.berkeley.edu

我写了以下代码来执行此操作:

fname = "mbox-short.txt"
f = open(fname,'r')

lines = f.readlines()
i = 0
count = len(lines)

while i < count :
    test = lines[i].split()
    if test[0] == "From " :
        print(test[1])
    i += 1

我一直收到以下错误:

Traceback (most recent call last):
  File "C:\Users\38775\Desktop\py4e\Project 2\email.py", line 10, in <module>
    if test[0] == "From " :
IndexError: list index out of range

我只是想了解为什么会这样,以及我如何纠正这个问题。请你不要花时间分享替代品。

由于

3 个答案:

答案 0 :(得分:0)

IndexError表示您正在尝试访问不存在的列表的某些部分(例如,尝试查找[1, 2, 3]的第5个值)。 最好知道文件的一小部分内容或示例输入和所需的输出,这样我们就可以确切地知道出了什么问题。

答案 1 :(得分:0)

所以这里修改了你的工作:

fname = "mbox-short.txt"
f = open(fname,'r')

lines = f.readlines()
i = 0
count = len(lines)


while i < count :
    test = lines[i].strip().split()
    if test[0] == "From":
        print(test[1])
    i += 1

在你“strip()”之后,你会得到这个“来自email@email.com”。您需要使用“.split()”将其拆分为两个部分的列表,如下所示 ['From','email@email.com']。 现在如果test [0] ==“From”(如果第一个单词是From),你可以打印测试[1],这将是第二个单词(电子邮件)。

“。split()”是你的错误,因为这是用空格或选择的不同字符分割字符串的原因。

希望这有帮助!

答案 2 :(得分:0)

谢谢大家!

原来问题是文件中有一些空行,所以我需要嵌套一个if函数来保持它的移动。

谢谢!