asyncio does not always show the full traceback

Frank Millman frank at
Wed Mar 1 09:25:11 EST 2017

"Frank Millman"  wrote in message news:o93vs2$smi$1 at
> I use asyncio in my project, so most of my functions start with 'async' 
> and
most of my calls are preceded by 'await'.
> If an exception is raised, I usually get the full traceback, but sometimes 
> I
just get something like the following -
> Traceback (most recent call last):
>   File "C:\Users\User\aib\aib\", line 645, in <module>
>     loop.run_until_complete(main(company))
>   File 
> "C:\Users\User\AppData\Local\Programs\Python\Python36\lib\asyncio\", 
> line 466, in run_until_complete
>     return future.result()
> ValueError: not enough values to unpack (expected 2, got 1)
> It does not show the line where the ValueError occurs, and I have not 
> managed to narrow down exactly when this happens.

I have narrowed it down a bit.

Here is a fairly simple example, based on some code I had lying around -

import asyncio
from itertools import count

async def aenumerate(aiterable):
    counter = count()
    async for x in aiterable:
        yield next(counter), x
        await asyncio.sleep(0.5)

async def gen(n):
    for i in range(100, 100+n):
        yield i

async def aenum():
    g = gen(5)
    async for a, x in aenumerate(g):
        print(a, x)

async def main():
    await aenum()

loop = asyncio.get_event_loop()

If you run this as is, it works.

I added '1/0' at various points, to force an exception.

If I put it in main() or in aenum(), I do not get the full traceback.

If I put it in aenumerate() or in gen(), I do get the traceback.

I hope this enables someone cleverer than me to figure out what is going on.


More information about the Python-list mailing list