【问题标题】:Beginner: Index Error - What's wrong with this code?初学者:索引错误 - 这段代码有什么问题?
【发布时间】:2018-06-14 21:28:24
【问题描述】:

如前所述,我是一名初学者,正在尝试做一些简短的练习。不幸的是,我的在线导师无法或不愿意帮助我(不断建议其他方法)。

我的任务是检查该行的第一个单词是否是“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

我只是想了解为什么会发生这种情况,以及如何纠正这种情况。请您不要花时间分享替代方案。

谢谢

【问题讨论】:

  • 你能放一些实际的测试用例及其正确的输出吗?
  • 你可以调试你的代码。
  • 嘿 Rohit,我已经进行了编辑
  • 问题本身有很多问题
  • 嗯,这是我第一次。如果你指出它可能会有所帮助。

标签: python index-error


【解决方案1】:

谢谢大家!

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

谢谢!

【讨论】:

    【解决方案2】:

    所以这里是对你所拥有的东西的修改:

    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()”之后,你会得到这个“From email@email.com”。您需要添加一个“.split()”,将其拆分为一个由两个部分组成的列表,如下所示 ['发件人','email@email.com']。 现在如果 test[0] == "From"(如果第一个单词是 From),您可以打印 test[1],这将是第二个单词(电子邮件)。

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

    希望这会有所帮助!

    【讨论】:

    • 进行了编辑,但错误消息保持不变。不过谢谢
    • 如果错误信息相同,您还必须删除此“From”中的空格,它应该只是“From”。使用 .split() 消除空格
    • 尝试复制和粘贴我所拥有的,测试并得到你想要的输出。
    • 谢谢我删除了空间。我也复制并粘贴了您的代码。太奇怪了,你却得到了输出,而我却做不到。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-17
      • 2019-06-18
      • 1970-01-01
      相关资源
      最近更新 更多