2013-09-12 3 views
3

Я хочу написать обработку ошибок для пользователя, который вводит неверный пароль для моего скрипта. Я продолжаю изменять код после инструкции except, но я не могу узнать, что такое правильный код для ошибки. Я что-то упускаю?Как обрабатывать ошибки с imaplib в Python

import imaplib 
import email 

mail = imaplib.IMAP4_SSL('imap.gmail.com') 

username = raw_input('USERNAME (email):') 
password = raw_input('PASSWORD: ') 

    try: 
     mail.login(username, password) 
     print "Logged in as %r !" % username 
    except: 
     imaplib.error 
     print "Log in failed." 

mail.list() 
# Out: list of "folders" aka labels in gmail. 
mail.select("inbox") # connect to inbox. 

fromWho = raw_input('FROM:') 

result, data = mail.uid('search', None, '(FROM fromWho)') 
latest_email_uid = data[0].split()[-1] 
result, data = mail.uid('fetch', latest_email_uid, '(RFC822)') 
raw_email = data[0][1] 

print raw_email 

ответ

9

Если вы хотите, чтобы поймать определенное исключение, имя исключения в try...except пункте в Python должно быть написано после except ключевого слова:

try: 
    mail.login(username, password) 
    print "Logged in as %r !" % username 
except imaplib.IMAP4.error: 
    print "Log in failed." 

Обратите внимание, что я изменил имя исключения для imaplib.IMAP4.error. Это не очевидно, но вы можете найти правильное имя исключения, просмотрев исходный код для imaplib.

+0

... Или, вызывая ошибку без 'try' /' except' и изучить ошибку в отладочные сообщения. – tripleee

+6

@tripleee: Он показывает 'imaplib.error' в traceback. И когда вы пытаетесь поймать 'imaplib.error',' AttributeError' забрасывается, говоря, что 'imaplib' не имеет атрибута' error'. Таким образом, из трассировки это совершенно непонятно, какое исключение поймать. –

+0

благодарит за ответ! – metersk

0

Я не уверен, считается ли это хорошей практикой, но объект mail создан из imaplib.IMAP4 и может быть использован. Используя пример кода выше: ... кроме mail.error: ...

Смежные вопросы