Python - start interactive debugger when exception would be otherwise thrown

后端 未结 4 1182
-上瘾入骨i
-上瘾入骨i 2021-02-04 03:16

Is there any way to make a python program start an interactive debugger, like what import pdb; pdb.set_trace() instead of actually throwing an exception?

I

4条回答
  •  时光取名叫无心
    2021-02-04 04:16

    The simplest way is to wrap your entire code inside a try block like this:

    if __name__ == '__main__':
    
        try:
            raise Exception()
        except:
            import pdb
            pdb.set_trace()
    

    There is a more complicated solution which uses sys.excepthook to override the handling of uncaught exceptions, as described in this recipe:

    ## {{{ http://code.activestate.com/recipes/65287/ (r5)
    # code snippet, to be included in 'sitecustomize.py'
    import sys
    
    def info(type, value, tb):
       if hasattr(sys, 'ps1') or not sys.stderr.isatty():
          # we are in interactive mode or we don't have a tty-like
          # device, so we call the default hook
          sys.__excepthook__(type, value, tb)
       else:
          import traceback, pdb
          # we are NOT in interactive mode, print the exception...
          traceback.print_exception(type, value, tb)
          print
          # ...then start the debugger in post-mortem mode.
          pdb.pm()
    
    sys.excepthook = info
    ## end of http://code.activestate.com/recipes/65287/ }}}
    

    The above code should be included in a file called sitecustomize.py inside site-packages directory, which is automatically imported by python. The debugger is only started when python is run in non-interactive mode.

提交回复
热议问题