In Python Lan Ref. 3.4.4, it is said that __aenter__()
and __aexit__()
must return awaitables. However, in the example async context manager, these
Your __aenter__
method must return a context.
class MyAsyncContextManager:
async def __aenter__(self):
await log('entering context')
# maybe some setup (e.g. await self.setup())
return self
async def __aexit__(self, exc_type, exc, tb):
# maybe closing context (e.g. await self.close())
await log('exiting context')
async def do_something(self):
await log('doing something')
usage:
async with MyAsyncContextManager() as context:
await context.do_something()
The methods in this example do not return None
. They are async
functions, which automatically return (awaitable) asynchronous coroutines. This is similar to how generator functions return generator iterators, even though they usually have no return
statement.