How asyncio works? and event loop vs exceptions

Marco Sulla mail.python.org at marco.sulla.e4ward.com
Sun Jul 24 17:48:09 EDT 2016


On 23 July 2016 at 16:06, Ian Kelly <ian.g.kelly at gmail.com> wrote:
> On Fri, Jul 22, 2016 at 6:27 PM, Marco S. via Python-list
> <python-list at python.org> wrote:
>> Furthermore I have a question about exceptions in asyncio. If I
>> understand well how it works, tasks exceptions can be caught only if
>> you wait for task completion, with yield from, await or
>> loop.run_until_complete(future). But in this case the coroutine blocks
>> the execution of the program until it returns. On the contrary you can
>> execute the coroutine inside an asyncio task and it will be
>> non-blocking, but in this case exceptions can't be caught in a try
>> statement.
>
> If you don't want to block the current function on the task, then spin
> off another task to do the error handling.  Instead of this:
>
> async def do_something():
>     try:
>         await do_something_else()
>     except DidNothingError as e:
>         handle_error(e)
>     ...
>
> Consider this:
>
> async def do_something():
>     get_event_loop().create_task(await_and_handle(do_something_else()))
>     ...
>
> async def await_and_handle(awaitable):
>     try:
>         await awaitable
>     except DidNothingError as e:
>         handle_error(e)

Really good suggestion, thank you.



More information about the Python-list mailing list