= Python ContextLib = '''`contextlib`''' is a module for working with [[Python/ContextManager|context managers]]. <> ---- == Decorators == === @ContextManager === To convert a function that yields a value into a context manager, try: {{{ from contextlib import contextmanager @contextmanager def managed_resource(): resource = acquire_resource() try: yield resource finally: release_resource(resource) with managed_resource() as resource: ... }}} ---- == Abstract Base Classes == The module contains two abstract base classes that can be used with `isinstance` or `issubclass`, and for [[Python/TypeAnnotation|type annotations]] === AbstractContextManager === Implements a simple `__enter__()` method (which returns `self`) and an abstract `__exit__()` method (which returns `None`). === AbstractAsyncContextManager === Implements a simple `__aenter__()` method (which returns `self`) and an abstract `__aexit__()` method (which returns `None`). ---- == See also == [[https://docs.python.org/3/library/contextlib.html|Python contextlib module documentation]] [[https://pymotw.com/3/contextlib/|Python Module of the Day article for contextlib]] ---- CategoryRicottone