您看到的错误消息:
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 无关。另一方面,为了让您描述“错误”类的对象before这样的对象存在,您需要将其引用为 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
并继续你的生活。