Python: async with

 

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())

 

posted @ 2023-06-06 14:08  ascertain  阅读(72)  评论(0编辑  收藏  举报