You shouldn't do that. What's happening is that when task() returns the Task class wrapping it tries to set the Task object's result, but since you've already set a result, the second set_result() raises InvalidStateError. If you want to raise RuntimeError, just write `raise RuntimeError("msg")` in your function.
Note that you could get the same error by using `myself.set_result(None)`. It's not specific to setting an exception, the problem is that the Task instance can't have its result or exeption set multiple times. On Wed, Sep 30, 2015 at 7:13 PM, Oleg K <windspi...@gmail.com> wrote: > Hello everyone, > > here is super simple example of one case i ran into: > > import asyncio > > loop = asyncio.get_event_loop() > async def task(): > print('i am task..') > myself.set_exception(RuntimeError('something bad')) > print('i keep working') > > myself = loop.create_task(task()) > loop.run_forever() > > > > which will produce something strange, > i expected to see just a RuntimeError propagated. > but instead, here is what is happening: > > i am task.. >> i keep working >> Exception in callback Task._step() >> handle: <Handle Task._step()> >> Traceback (most recent call last): >> File "/home/http/Python-3.5.0/lib/python3.5/asyncio/tasks.py", line >> 239, in _step >> result = coro.send(value) >> StopIteration >> >> During handling of the above exception, another exception occurred: >> >> Traceback (most recent call last): >> File "/home/http/Python-3.5.0/lib/python3.5/asyncio/events.py", line >> 125, in _run >> self._callback(*self._args) >> File "/home/http/Python-3.5.0/lib/python3.5/asyncio/tasks.py", line >> 241, in _step >> self.set_result(exc.value) >> File "/home/http/Python-3.5.0/lib/python3.5/asyncio/futures.py", line >> 335, in set_result >> raise InvalidStateError('{}: {!r}'.format(self._state, self)) >> asyncio.futures.InvalidStateError: FINISHED: <Task finished coro=<task() >> done, defined at test_aio_exception.py:4> exception=RuntimeError('something >> bad',)> >> > > > i am sorry in advance if it is just something i don't understand at very > basic level about asyncio. > > > Regards, > > Oleg. > > -- --Guido van Rossum (python.org/~guido)