2010-09-22 6 views
5

Я делаю программу для AIX 5.3 в Python 2.6.1, которая взаимодействует с сервером IMAP. Я получаю исключение, которое я не знаю, как поймать - у него, похоже, нет имени, которое я могу использовать с «исключением». Похоже, что ошибка связана с подключением к серверу.Python: Как поймать такое исключение?

Последняя часть трассировки стека выглядит следующим образом:

File "/home/chenf/python-2.6.1/lib/python2.6/imaplib.py", line 890, in _command_complete 
    raise self.abort('command: %s => %s' % (name, val)) 
abort: command: SEARCH => socket error: EOF 

Я только хочу, чтобы поймать эту конкретную ошибку, так что я могу подключиться к серверу IMAP, когда это произойдет. Какой синтаксис для этого исключения?

ответ

9

Исключение составляет imaplib.IMAP4.abort (Python doc) так ловить, который должен работать

+0

О, я сейчас понимаю. Я думал, что self.abort() была функцией (которая меня смутила, как вы можете использовать функцию как исключение?), Но теперь я понимаю, что это исключение! Благодаря! – Enfors

3

вы можете попытаться поймать его и узнать тип:

импорт SYS, отслеживающий, pprint

try: 
    do what you want to do 
except: 
    type, value, tb = sys.exc_info() 
    pprint.pprint(type) 
    print("\n" + ''.join(traceback.format_exception(type, value, tb)).strip("\n")) 
+0

-1, OP знает, как справляться с исключениями, его проблема заключалась в том, чтобы знать, как ловить self.abort, и сохранить ваш ответ в форме, вставляя код с формированием кода с помощью кода TAG 'code' – shahjapan

+1

Я исправил ваше сообщение. это 'except:', а не 'Exception'. Кроме того, код такой, как вы его написали, и я просто исправил форматирование. Если вы нажмете «edit», вы сможете увидеть, как это работает. Просто запустите все, что вы хотите, отформатировав четыре пробела вправо. – aaronasterling

+0

спасибо за форматирование :) –

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