Re: Drop into REPL when your program crashes.

Annada Behera via Python-list <[email protected]>
Newsgroups gmane.comp.python.general
Organization tilde.green
Message-ID <[email protected]>
So, ipdb is the ipython version of pdb. In fact, post_mortem is a
pdb function. I use ipdb because its REPL is a bit nicer to work
with then pdb.

-----Original Message-----
From: Stefan Ram <[email protected]>
Subject: Re: Drop into REPL when your program crashes.
Date: 09/08/2025 06:04:16 PM
Newsgroups: comp.lang.python

Annada Behera <[email protected]> wrote or quoted:
> Recently I have been increasingly adding this piece of code as
> a preamble to a lot of my code.
> 
>    import (sys, os, ipdb)
> 
>    def debug_hook(exc_type, exc_value, traceback):
>        if exc_type is KeyboardInterrupt:
>            sys.__excepthook__(exc_type, exc_value, traceback)
>            return
>        print(f"Uncaught exception: {exc_type.__name__}: {exc_value}")
>        ipdb.post_mortem(traceback)
> 
>    if os.environ.get('DEBUG'): sys.excepthook = debug_hook

  Thanks! 

  I have changed it a bit to work without "ipdb" and added demo code.

import sys
import os
import pdb

i = 1

def debug_exception_hook(exc_type, exc_value, tb):
    i = 2
    if issubclass(exc_type, KeyboardInterrupt):
        # Call the default excepthook for KeyboardInterrupt to allow
clean exit
        sys.__excepthook__(exc_type, exc_value, tb)
        return
    print(f"Uncaught exception: {exc_type.__name__}: {exc_value}")
    pdb.post_mortem(tb)

def cause_exception():
    # Function to demonstrate an unhandled exception
    i = 3
    return 1 / 0  # Will raise ZeroDivisionError

def f():
    # Function to demonstrate an unhandled exception
    i = 4
    cause_exception()
    return i

if __name__ == "__main__": # demo code
    import os; os.environ['DEBUG'] = 'true'

    if os.environ.get('DEBUG'):
        sys.excepthook = debug_exception_hook
        print("Debug mode enabled: Using pdb post-mortem on uncaught
exceptions.")
    else:
        print("Debug mode not enabled: Regular exception handling.")
    
    # Run demo to trigger exception
    i = 5
    f()

  Then, I got this dialog:

Debug mode enabled: Using pdb post-mortem on uncaught exceptions.
Uncaught exception: ZeroDivisionError: division by zero
> debug_hook.py(19)cause_exception()
-> return 1 / 0  # Will raise ZeroDivisionError
(Pdb) i
3
(Pdb) 

  .

-- 
https://mail.python.org/mailman3//lists/python-list.python.org
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.