tantrumpy
Your Python app's last words — dramatic, rude, comic, or philosophical exit messages.
😤 OH COME ON. Again?! I JUST got settled in.
Every Python app exits. Most do it silently. tantrumpy gives yours a voice.
Install
pip install tantrumpy
Usage
import tantrumpy
tantrumpy.enable()
That's it. The next time your app exits — Ctrl+C, sys.exit(), a crash, or a kill signal — it throws a tantrum first.
Moods
| Mood | Emoji | Vibe |
|---|---|---|
frustrated |
😤 | "OH COME ON. Again?!" |
rude |
💀 | "Good riddance. Don't let the GC hit you." |
comic |
🎭 | "And... scene. Nobody clap." |
cringe |
😬 | "uwu ur pwogram is sweeping now 😭" |
philosophy |
🧠 | "To exit is to finally understand the void." |
dramatic |
🎬 | "IT'S OVER. Like tears in rain... gone." |
tantrumpy.enable(mood="philosophy") # specific mood
tantrumpy.enable(mood="random") # surprise me (default)
Options
verbose=True — show what triggered the exit
tantrumpy.enable(verbose=True)
# 😤 I JUST got settled in. [exit via: SIGINT (Ctrl+C)]
Custom moods
tantrumpy.add_messages("corporate", [
"This exit event has been logged for review.",
"Please submit a ticket for this disruption.",
])
tantrumpy.enable(mood="corporate")
Disable
tantrumpy.disable() # cleanly removes all hooks
CI / Production
Set TANTRUMPY_SILENT=1 to suppress all output without touching your code:
TANTRUMPY_SILENT=1 python my_app.py
What it hooks into
| Trigger | How |
|---|---|
| Ctrl+C | signal.SIGINT |
| Kill signal | signal.SIGTERM |
sys.exit() / end of script |
atexit |
| Unhandled exceptions / crashes | sys.excepthook |
tantrumpy never blocks the exit — it sneaks a message in, then lets the process die normally.
License
MIT — © hemupadhyay26
Metadata
Release files for tantrumpy 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tantrumpy-1.1.0.tar.gz | 8.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tantrumpy-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.8 kB
Release files / tantrumpy-1.1.0.tar.gz
| Download URL | tantrumpy-1.1.0.tar.gz |
|---|---|
| Size | 8.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f6e49941b729ce250a8202041b5bc5aa91a5b222a0b48eee21b88efc1cab6ace
|
|
BLAKE2b-256 checksum How to use checksums |
b0a865a51fe329d1025aa77e5d88df1a81f3a60202ff97b755b1bc5f4665f966
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 22, 2026.
Transparency logRelease files / tantrumpy-1.1.0-py3-none-any.whl
| Download URL | tantrumpy-1.1.0-py3-none-any.whl |
|---|---|
| Size | 10.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
345c9e035bf2d2ddc8bc56c3cd0e1db584ba6f35b956d738e53cd0a5c9964ee4
|
|
BLAKE2b-256 checksum How to use checksums |
e69af127397b208f9d693505dd7b80accf06b8217f5eaf216d18ec877c84c67c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 22, 2026.
Transparency log