A Exception in the Task (of underlying asyncio.Future to be precise) can be retrieved with Future.exception(). If it’s not retrieved, the exception will be handled at release of the Future object with eventloop’s call_exception_handler.
So, as @dirn pointed, while the Task has reference (assigned to variable in your case) it’s not going be freed, therefore del task_future won’t be called, loop’s handler won’t be executed either.