I recently switched from ipython0.10 to ipython0.11. In ipython0.11, I only see a small snippet of the full traceback when the python debugger engages (i.e. using %pdb
), whereas in ipython0.10 I'd see the full traceback. As far as I can tell, the full traceback is not directly accessible from the pdb command line - you can navigate through it with 'u' but can't see it directly.
So, is there any way to show the full traceback? Such as a configuration parameter?
Or, even more usefully, is there any way to have ipython just show the Exception that was caught, rather than showing where in the code it was caught?
EDIT: Example:
In [1]: pdb
Automatic pdb calling has been turned ONIn [2]: 1/0
> <ipython-input-2-05c9758a9c21>(1)<module>()-1 1/0ipdb> q
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
/Users/adam/<ipython-input-2-05c9758a9c21> in <module>()
----> 1 1/0ZeroDivisionError: integer division or modulo by zero
I'd like to see the ZeroDivisionError before q
'ing out of the pdb.
is there any way to have ipython just show the Exception that wascaught, rather than showing where in the code it was caught?
You could use sys.excepthook
:
import sysdef exc_hook(type, value, traceback):print typesys.excepthook = exc_hook
From the sys
module documentation:
sys.excepthook(type, value, traceback)
This function prints out a given traceback and exception tosys.stderr.
When an exception is raised and uncaught, the interpreter callssys.excepthook with three arguments, the exception class, exceptioninstance, and a traceback object. In an interactive session thishappens just before control is returned to the prompt; in a Pythonprogram this happens just before the program exits. The handling ofsuch top-level exceptions can be customized by assigning anotherthree-argument function to sys.excepthook
.
sys.__displayhook__
sys.__excepthook__
These objects contain the original values of displayhook andexcepthook at the start of the program. They are saved so thatdisplayhook and excepthook can be restored in case they happen to getreplaced with broken objects.
You can also try starting ipython with the --xmode
option set to Plain
From IPython reference:
$ ipython [options] files--xmode=<modename>
Mode for exception reporting.
Valid modes: Plain, Context and Verbose.
Plain: similar to python’s normal traceback printing.
Context: prints 5 lines of context source code around each line in the traceback.
Verbose: similar to Context, but additionally prints the variables currently visible where the exception happened (shortening theirstrings if too long). This can potentially be very slow, if you happento have a huge data structure whose string representation is complexto compute. Your computer may appear to freeze for a while with cpuusage at 100%. If this occurs, you can cancel the traceback withCtrl-C (maybe hitting it more than once).
Here are some example usages. Notice the difference in lines for each traceback:
--xmode=Plain
:
[ 19:55 jon@hozbox ~/SO/python ]$ ipython --xmode=Plain ipython-debugger-full-traceback-on-interactive-pdb.py
------------------------------------------------------------
Traceback (most recent call last):File "ipython-debugger-full-traceback-on-interactive-pdb.py", line 2, in <module>1 / 0
ZeroDivisionError: integer division or modulo by zero
--xmode=Context
:
[ 19:55 jon@hozbox ~/SO/python ]$ ipython --xmode=Context ipython-debugger-full-traceback-on-interactive-pdb.py
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)/home/jon/SO/python/ipython-debugger-full-traceback-on-interactive-pdb.py in <module>()1
----> 2 #!/usr/bin/python3 1 / 04 5 ZeroDivisionError: integer division or modulo by zero
--xmode=Verbose
:
[ 19:54 jon@hozbox ~/SO/python ]$ ipython --xmode=Verbose ipython-debugger-full-traceback-on-interactive-pdb.py
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)/home/jon/SO/python/ipython-debugger-full-traceback-on-interactive-pdb.py in <module>()1
----> 2 #!/usr/bin/python3 1 / 04 5 ZeroDivisionError: integer division or modulo by zero
And without specifying a .py file:
--xmode=Plain
:
[ 19:55 jon@hozbox ~/SO/python ]$ ipython --xmode=PlainIn [1]: 1 / 0
------------------------------------------------------------
Traceback (most recent call last):File "<ipython console>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
--xmode=Context
:
[ 20:03 jon@hozbox ~/SO/python ]$ ipython --xmode=ContextIn [1]: 1 / 0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)/home/jon/SO/python/<ipython console> in <module>()ZeroDivisionError: integer division or modulo by zero
--xmode=Verbose
:
[ 20:01 jon@hozbox ~/SO/python ]$ ipython --xmode=VerboseIn [1]: 1 / 0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)/home/jon/SO/python/<ipython console> in <module>()ZeroDivisionError: integer division or modulo by zero
Using the Python debugger.