views:

67

answers:

2

I'm making a program for AIX 5.3 in Python 2.6.1 that interfaces with an IMAP server. I'm getting an exception which I don't know how to catch - it doesn't seem to have a name that I can use with "except". The error seems to be some kind of timeout in the connection to the server.

The last part of the stack trace looks like this:

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

I only want to catch this specific error, so that I can reconnect to the IMAP server when it happens. What's the syntax for catching this kind of exception?

+3  A: 

The exception is imaplib.IMAP4.abort (Python doc) so catching that should work

Mark
Oh, I understand now. I thought self.abort() was a function (which confused me, how can you use a function as an exception?), but now I realise it's an exception! Thanks!
Enfors
A: 

you can try to catch it and find out the type:

import sys,traceback,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"))
Daniel Lenkes
-1, OP knows how to handle the exceptions, his problem was to know how to catch self.abort, and keep your answer formated, pasting code needs formating with code TAGs `code`
Tumbleweed
@Daniel, I fixed your post. it's `except:`, not `Exception`. Other than that the code is as you wrote it and I just fixed the formatting. If you click 'edit', then you will be able to see how it works. Just start everything you want formatted four spaces to the right.
aaronasterling
thank you for the formatting tip :)
Daniel Lenkes
@shahjapan, that is ok that he knows hoe to catch exception, but if he does not know how to check its type, this is a way. That's why I sent the code.
Daniel Lenkes