A context manager defines what happens when a with block starts and when it ends. Files close when their block exits, including when code inside raises an exception. contextlib.contextmanager lets you express the same pattern with a generator that yields once, then finishes cleanup in finally. Cleanup and error suppression are separate choices: releasing a resource doesn't mean that an unexpected error should disappear. You'll work with StringIO streams, temporary state, and an explicit context protocol. These resources exist only inside one exercise call. Return evidence of both the work and the cleanup so the checker can distinguish a successful operation from a leaked or prematurely closed resource.