Problem
try:
something here
except:
print('the whatever error occurred.')
In my except: block, how can I publish the error/exception?
Asked by TIMEX
Solution #1
Python 2.6 and beyond, as well as Python 3.x:
except Exception as e: print(e)
Use: for Python 2.5 and before.
except Exception,e: print str(e)
Answered by jldupont
Solution #2
The traceback module has methods for formatting and printing exceptions and their tracebacks, such as this, which prints the exception in the same way as the default handler:
import traceback
try:
1/0
except Exception:
traceback.print_exc()
Output:
Traceback (most recent call last):
File "C:\scripts\divide_by_zero.py", line 4, in <module>
1/0
ZeroDivisionError: division by zero
Answered by Cat Plus Plus
Solution #3
It’s a little cleaner in Python 2.6 or later:
except Exception as e: print(e)
It’s still readable in older versions:
except Exception, e: print e
Answered by ilya n.
Solution #4
Here’s an example from Errors and Exceptions if you want to pass error strings (Python 2.6)
>>> try:
... raise Exception('spam', 'eggs')
... except Exception as inst:
... print type(inst) # the exception instance
... print inst.args # arguments stored in .args
... print inst # __str__ allows args to printed directly
... x, y = inst # __getitem__ allows args to be unpacked directly
... print 'x =', x
... print 'y =', y
...
<type 'exceptions.Exception'>
('spam', 'eggs')
('spam', 'eggs')
x = spam
y = eggs
Answered by Nick Dandoulakis
Solution #5
(I was going to remark on @jldupont’s response, but I don’t have enough reputation.)
I’ve seen answers similar to @jldupont’s answer elsewhere as well. To be clear, I believe it is critical to mention that:
except Exception as e:
print(e)
By default, the error output is written to sys.stdout. In general, a more acceptable method to error handling would be:
except Exception as e:
print(e, file=sys.stderr)
(Importing sys is required for this to operate.) This route reports the error to STDERR rather than STDOUT, allowing for correct output parsing/redirection/etc. I appreciate that the question was only about ‘publishing an error,’ but it seems vital to mention the proper practice here rather than omitting this detail, which could lead to non-standard code for those who don’t learn better.
I haven’t utilized the traceback module like Cat Plus Plus suggested, and perhaps it is the best option, but I thought I’d mention it.
Answered by grish
Post is based on https://stackoverflow.com/questions/1483429/how-to-print-an-exception-in-python