If you don't know the type/origin of the error, you can try:
import sys
try:
doSomethingWrongHere()
except:
print('Error: {}'.format(sys.exc_info()[0]))
But be aware, you'll get pep8 warning:
[W] PEP 8 (E722): do not use bare except
Even though I realise this is an old question, I'd like to suggest using the traceback
module to handle output of the exceptions.
Use traceback.print_exc()
to print the current exception to standard error, just like it would be printed if it remained uncaught, or traceback.format_exc()
to get the same output as a string. You can pass various arguments to either of those functions if you want to limit the output, or redirect the printing to a file-like object.
Another way hasn't been given yet:
try:
1/0
except Exception, e:
print e.message
Output:
integer division or modulo by zero
args[0]
might actually not be a message.
str(e)
might return the string with surrounding quotes and possibly with the leading u
if unicode:
'integer division or modulo by zero'
repr(e)
gives the full exception representation which is not probably what you want:
"ZeroDivisionError('integer division or modulo by zero',)"
edit
My bad !!! It seems that BaseException.message
has been deprecated from 2.6
, finally, it definitely seems that there is still not a standardized way to display exception messages. So I guess the best is to do deal with e.args
and str(e)
depending on your needs (and possibly e.message
if the lib you are using is relying on that mechanism).
For instance, with pygraphviz
, e.message
is the only way to display correctly the exception, using str(e)
will surround the message with u''
.
But with MySQLdb
, the proper way to retrieve the message is e.args[1]
: e.message
is empty, and str(e)
will display '(ERR_CODE, "ERR_MSG")'
To inspect the error message and do something with it (with Python 3)...
try:
some_method()
except Exception as e:
if {value} in e.args:
{do something}
For python2, It's better to use e.message
to get the exception message, this will avoid possible UnicodeDecodeError
. But yes e.message
will be empty for some kind of exceptions like OSError
, in which case we can add a exc_info=True
to our logging function to not miss the error.
For python3, I think it's safe to use str(e)
.
Source: Stackoverflow.com