你看到的错误信息:
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 并继续您的生活。