Сообщение об ошибке, которое вы видите:
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, кажется, не «вкладывает» классы - только определения классов.Таким образом, если объект класса «ошибка» существует, это объект класса «ошибка», который был определен в области действия «imaplib».Тот факт, что определение класса «error» было внутри определения lib класса «IMAP4», не имеет значения для Python.С другой стороны, чтобы описать объект класса «error» до того, как такой объект существует, вам нужно сослаться на него как 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
и двигаться дальше по жизни.