Published: 01 October 2020, 18:00
Context manager contextlib.nullcontext is helpful when a block of code not always should be executed in a context.
A good example is a function that works with a database. If a session is passed, the function will use it. Otherwise, it creates a new session, and does it in a context to guarantee fallback logic to be executed:
from contextlib import nullcontext
def get_user(id, session=None):
if session:
context = nullcontext(session)
else:
context = create_session()
with context as session:
...
Another example is optional suppressing errors:
from contextlib import suppress
def do_something(silent=False):
if silent:
context = suppress(FileNotFoundError)
else:
context = nullcontext()
with context:
...
It was added in Python 3.7. For earlier Python versions DIY:
from contextlib import contextmanager
@contextmanager
def nullcontext(value=None):
yield value
Another option is to use ExitStack.