When try/finally Becomes a Code Smell (And the Fix)

The __enter__/__exit__ protocol generalizes to every acquire/release lifecycle, not just file handles.