IndexError:抓取gmail文本时列出索引超出范围

时间:2014-11-26 12:32:40

标签: python regex python-2.7 gmail steam

我正在使用此代码登录我的Gmail帐户并从steampowered的电子邮件中检索文本。

else:
      g = gmail.login(emailAddress, emailPassword)
      # Check for emails until we get Steam Guard code
      for i in range(0, 3):
        mails = g.inbox().mail(sender="noreply@steampowered.com", unread=True)
        if mails:
          mail = mails[-1]
          mail.fetch()
          #print re.findall(r"you'll need to complete the process: ([A-Z0-9]{5})", mail.body)
          guardCode = re.findall(r"you'll need to complete the process: ([A-Z0-9]{5})", mail.body)[0]
          mail.read()
          mail.delete()
          g.logout()
          return guardCode
        else:
          time.sleep(3)

我得到了

  

IndexError:列表索引超出范围

在这一行:

guardCode = re.findall(r"you'll need to complete the process: ([A-Z0-9]{5})", mail.body)[0]

这是因为

re.findall(r"you'll need to complete the process: ([A-Z0-9]{5})", mail.body)

返回

[]

所以列表是空的。为什么它是空的?

这是电子邮件的格式:

  

您是使用新浏览器还是Steam应用登录Steam?这里的   您需要完成此过程的Steam Guard代码:XXXXX< ----我需要这个

编辑:Gmail是来自here的自定义python模块。 编辑#2:以下是电子邮件的更好表示:

  

亲爱的XXX,

     

您是使用新浏览器还是Steam应用登录Steam?这里的   您需要完成此过程的Steam Guard代码:

     

XXXXX

     

如果您最近没有尝试从设备登录Steam   位于XXXX(美国),其他人可能正在尝试访问   你的帐户。您可以在线查看有关此登录尝试的更多信息。

     

如果您怀疑其他人可能试图访问您的帐户,   请:

2 个答案:

答案 0 :(得分:2)

问题是因为中的you’ll。它不是正常的单引号'

>>> s = "Are you logging into Steam using a new browser or Steam app? Here’s the Steam Guard code you’ll need to complete the process: XXXXX"
>>> re.findall(r"you’ll need to complete the process: ([A-Z0-9]{5})", s)
['XXXXX']

答案 1 :(得分:0)

我解决了我的问题。我最后删除了所有换行符,并将电子邮件正文作为整个字符串。感谢所有帮助过的人!

str = re.sub('\s+',' ', mail.body)
guardCode = re.findall(r'to complete the process: ([A-Z0-9]{5})', str)[0]