import asyncio
import sys
class AsyncContextManager:
async def __aenter__(self):
return self
async def __aexit__(self, exc_type, exc_val, exc_tb):
print(exc_type, exc_val, exc_tb)
return True
# async with AsyncContextManager() as acm:
# print(acm)
async def main():
# async with AsyncContextManager() as acm:
# print(acm)
# raise TimeoutError
acm = AsyncContextManager()
aenter = type(acm).__aenter__(acm)
try:
print(await aenter)
raise TimeoutError
except:
if not await type(acm).__aexit__(acm, *sys.exc_info()):
raise
else:
await acm.__aexit__(*sys.exc_info())
with asyncio.Runner(debug=True) as runner:
runner.run(main())