handling uncaught exceptions with pdb?

P

Paul Rubin

I think I've asked about this before, but is there a way to set up
Python to handle uncaught exceptions with pdb? I know about setting
sys.except_hook to something that calls pdb, but this is normally done
at the outer level of a program, and by the time that hook gets
called, the exception has already unwound the stack to the outermost
level. My situation is I run a multi-hour or multi-day computation
that eventually crashes due to some unexpected input and I'd like to
break to the debugger at the innermost level, right when the exception
is encountered, so I can fix the error with pdb commands and resume
processing. Of course this presumes a certain semantics for Python
exceptions (i.e. handling one involves scanning the stack twice, once
to look for a handler and again to actually unwind the stack) and I'm
not sure if it's really done that way. I do know that Lisp has a
requirement like that, though; so maybe there is hope.
 
R

R. Bernstein

Paul Rubin said:
I think I've asked about this before, but is there a way to set up
Python to handle uncaught exceptions with pdb? I know about setting
sys.except_hook to something that calls pdb, but this is normally done
at the outer level of a program, and by the time that hook gets
called, the exception has already unwound the stack to the outermost
level. My situation is I run a multi-hour or multi-day computation
that eventually crashes due to some unexpected input and I'd like to
break to the debugger at the innermost level, right when the exception
is encountered, so I can fix the error with pdb commands and resume
processing.
....

Why not use the traceback you get to show you where to change the code
around that point to add an exception handler there which calls the
debugger?
 
D

Diez B. Roggisch

R. Bernstein said:
...

Why not use the traceback you get to show you where to change the code
around that point to add an exception handler there which calls the
debugger?

Because he wants to fix the issue directly in-place, and then continue,
instead of losing hours or even days of computation.

However, it's not possible AFAIK.

Diez
 
T

Thomas Heller

Paul said:
I think I've asked about this before, but is there a way to set up
Python to handle uncaught exceptions with pdb? I know about setting
sys.except_hook to something that calls pdb, but this is normally done
at the outer level of a program, and by the time that hook gets
called, the exception has already unwound the stack to the outermost
level. My situation is I run a multi-hour or multi-day computation
that eventually crashes due to some unexpected input and I'd like to
break to the debugger at the innermost level, right when the exception
is encountered, so I can fix the error with pdb commands and resume
processing. Of course this presumes a certain semantics for Python
exceptions (i.e. handling one involves scanning the stack twice, once
to look for a handler and again to actually unwind the stack) and I'm
not sure if it's really done that way. I do know that Lisp has a
requirement like that, though; so maybe there is hope.

Would this work (although it probably will slow down the program)?

<snip>
import sys, pdb

def tracefunc(frame, event, arg):
if event == "exception":
pdb.set_trace()
return tracefunc

sys.settrace(tracefunc)

def test(arg):
if arg > 20:
raise ValueError(arg)
return test(arg+1)

test(0)
<snip>

Thomas
 
R

R. Bernstein

Diez B. Roggisch said:
Because he wants to fix the issue directly in-place, and then
continue, instead of losing hours or even days of computation.

Then proactively add exception handlers ;-)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,273
Latest member
DamonShoem

Latest Threads

Top