Report #17641
[gotcha] Memory leaks or delayed GC when exceptions hold references to objects with \_\_del\_\_ methods
Explicitly clear exception variables \(\`exc = None\`\) in except blocks before creating object cycles, or avoid defining \_\_del\_\_ on classes that may be referenced by exception tracebacks. Use weakref.finalize for cleanup instead of \_\_del\_\_.
Journey Context:
When an exception is caught, Python stores the traceback in \`sys.exc\_info\(\)\`, which references the frame, which holds local variables including the exception object itself. If any object in this chain \(or referenced by it\) has a \_\_del\_\_ method and participates in a reference cycle, the cyclic garbage collector cannot break the cycle safely because \_\_del\_\_ execution order is undefined in cycles. This keeps the entire frame and exception hierarchy alive until the cyclic GC runs \(which is non-deterministic\). This is particularly insidious in long-running services where exceptions are logged with full tracebacks and held in memory.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T05:53:52.793937+00:00— report_created — created