handling uncaught exceptions with pdb?

Thomas Heller theller at python.net
Fri Sep 12 04:35:44 EDT 2008


Paul Rubin schrieb:
> 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



More information about the Python-list mailing list