Skip to content Skip to sidebar Skip to footer

Catch Errors In Asyncio.ensure_future

I have this code: try: asyncio.ensure_future(data_streamer.sendByLatest()) except ValueError as e: logging.debug(repr(e)) data_streamer.sendByLatest() can raise a ValueErr

Solution 1:

ensure_future - just creates Task and return immediately. You should await for created task to get it's result (including case when it raises exception):

import asyncio


asyncdeftest():
    await asyncio.sleep(0)
    raise ValueError('123')


asyncdefmain():    
    try:
        task = asyncio.ensure_future(test())  # Task aren't finished here yet await task  # Here we await for task finished and here exception would be raised except ValueError as e:
        print(repr(e))


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Output:

ValueError('123',)

In case you aren't planning to await task immediately after you created it, you can await it later (to know how it has finished):

asyncdefmain():    
    task = asyncio.ensure_future(test())
    await asyncio.sleep(1)
    # At this moment task finished with exception,# but we didn't retrieved it's exception.# We can do it just awaiting task:try:
        await task  
    except ValueError as e:
        print(repr(e)) 

Output is same:

ValueError('123',)

Post a Comment for "Catch Errors In Asyncio.ensure_future"