Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #197558
| From | ram@zedat.fu-berlin.de (Stefan Ram) |
|---|---|
| Newsgroups | comp.lang.python |
| Subject | Re: Drop into REPL when your program crashes. |
| Date | 2025-09-08 12:34 +0000 |
| Organization | Stefan Ram |
| Message-ID | <debugging-20250908133058@ram.dialup.fu-berlin.de> (permalink) |
| References | <7a0dbcc10639dce0c40a6c4b3972f19bde2fc14e.camel@tilde.green> |
Annada Behera <annada@tilde.green> 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)
.
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
Drop into REPL when your program crashes. Annada Behera <annada@tilde.green> - 2025-09-08 16:37 +0530
Re: Drop into REPL when your program crashes. ram@zedat.fu-berlin.de (Stefan Ram) - 2025-09-08 12:34 +0000
Re: Drop into REPL when your program crashes. Annada Behera <annada@tilde.green> - 2025-09-09 11:53 +0530
Re: Drop into REPL when your program crashes. Ethan Carter <ec1828@somewhere.edu> - 2025-09-08 21:21 -0300
csiph-web