Python's with statement
Managing resources usually involves three steps - allocating, using, and releasing. You're familiar with the try... finally pattern but Python also provides context managers.
This is an object which has runtime context. There are entry and exit methods which let us define how resources are allocated and what needs