Report #55130
[gotcha] Storing sys.exc\_info\(\) traceback creates a reference cycle that leaks memory
Never store the traceback object in a local variable beyond the except block; if you must hold it, delete the variable with \`del exc\_traceback\` immediately after processing, or use \`traceback.format\_exception\` to serialize it immediately.
Journey Context:
When an exception is handled, \`sys.exc\_info\(\)\` returns \`\(type, value, traceback\)\`. The traceback object holds a reference to the current stack frame \(\`tb\_frame\`\), which holds local variables, which may include the traceback object itself, creating a reference cycle. In CPython, this cycle prevents garbage collection of the entire frame and its variables until the cycle collector runs \(if it runs\). In long-running services that log exception details, this leaks memory. The docs explicitly warn against storing the traceback. The alternative is to extract the formatted string immediately or explicitly break the cycle by deleting the variable.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T23:01:48.953609+00:00— report_created — created