asyncio does not always show the full traceback
songofacandy at gmail.com
Thu Mar 2 07:31:32 EST 2017
I can't reproduce it on Linux.
Maybe, it's windows specific bug?
On Wed, Mar 1, 2017 at 11:25 PM, Frank Millman <frank at chagford.com> wrote:
> "Frank Millman" wrote in message news:o93vs2$smi$1 at blaine.gmane.org...
>> I use asyncio in my project, so most of my functions start with 'async'
> most of my calls are preceded by 'await'.
>> If an exception is raised, I usually get the full traceback, but sometimes
> just get something like the following -
>> Traceback (most recent call last):
>> File "C:\Users\User\aib\aib\test_data.py", line 645, in <module>
>> 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