您看到的错误消息:
imaplib.error: [AUTHENTICATIONFAILED] Authentication failed.
尽可能地描述错误;在异常发生时,异常类被称为“imaplib.error”,因为提出它的人已经这样描述了它(稍后会详细介绍)。我四处寻找,我想我已经为你找到了:
Python 2.7.2 (default, Nov 14 2011, 19:37:59)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import imaplib
>>> imaplib.IMAP4.error
<class 'imaplib.error'>
我打开 imaplib.py 文件,发现了一个奇怪的异常抛出机制。“IMAP4”是一个类,“error”是在 IMAP4 类中定义的一个类。Python 似乎没有“嵌套”类——只是类定义。因此,一旦存在“error”类的对象,它就是“imaplib”范围内定义的“error”类的对象。“错误”类定义在“IMAP4”类库定义中的事实与 Python 无关。另一方面,为了让您在此类对象存在之前描述类“错误”的对象,您需要将其引用为 imaplib.IMAP4.error 以便 Python 找到您正在谈论的类的定义.
非常令人困惑,我知道,在我开始调查这个问题之前,我并不真正了解所有这些。这是一个简短的说明:
Python 2.7.2 (default, Nov 14 2011, 19:37:59)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> class foo(object):
... class bar(object):
... pass
... def b(self):
... return bar()
...
>>> bar
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'bar' is not defined
>>> foo.bar
<class '__main__.bar'>
>>> foo().bar()
<__main__.bar object at 0x10048dd10>
基本上,您试图做一件非常合理的事情,但是 imaplib 库处理异常抛出的方式有点奇怪,让您的生活变得困难。长话短说,你应该试着抓住imaplib.IMAP4.error
并继续你的生活。