Reputation: 27890
Suppose I'm running some code interactively in IPython and it produces an uncaught exception, like:
In [2]: os.waitpid(1, os.WNOHANG)
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-2-bacc7636b058> in <module>()
----> 1 os.waitpid(1, os.WNOHANG)
OSError: [Errno 10] No child processes
This exception is now intercepted by the default IPython exception handler and produces an error message. Is it possible somehow to extract the exception object that was caught by IPython?
I want to have the same effect as in:
# Typing this into IPython prompt:
try:
os.waitpid(1, os.WNOHANG)
except Exception, exc:
pass
# (now I can interact with "exc" variable)
but I want it without this try/except
boilerplate.
Upvotes: 17
Views: 4280
Reputation: 4528
I think sys.last_value
should do the trick:
In [8]: 1/0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
/home/ubuntu/<ipython console> in <module>()
ZeroDivisionError: integer division or modulo by zero
In [11]: sys.last_value
Out[11]: ZeroDivisionError('integer division or modulo by zero',)
If you want even more fun with such things, checkout the traceback module, but that probably won't be of much use within ipython.
Upvotes: 38