"Ian Kelly" wrote in message news:CALwzid=ssdsm8hdan+orj54a_jeu9wc8103iqgkaah8mrj-...@mail.gmail.com...

On Jan 29, 2016 11:04 PM, "Frank Millman" <fr...@chagford.com> wrote:
>
> Hi all
>
> To loop though an iterator one usually uses a higher-level construct > such
as a 'for' loop. However, if you want to step through it manually you can
do so with next(iter).
>
> I expected the same functionality with the new 'asynchronous iterator' > in
Python 3.5, but I cannot find it.
>
> I can achieve the desired result by calling 'await aiter.__anext__()',
but this is clunky.
>
> Am I missing something?

async for x in aiter:
    pass

Can only be used inside a coroutine, of course.

I know that you can use this to loop through the entire iterator, but I have a special case.

There are times when I want to execute a SELECT statement, and test for three possibilities -
   - if no rows are returned, the object does not exist
   - if one row is returned, the object does exist
   - if more that one row is returned, raise an exception

We had a recent discussion about the best way to do this, and ChrisA suggested the following, which I liked -

   cur.execute('SELECT ...)
   try:
       row = next(cur)
   except StopIteration:
       # row does not exist
   else:
       try:
           next_row = next(cur)
       except StopIteration:
           # row does exist
       else:
           # raise exception

Now that I have gone async, I want to do the same with an asynchronous iterator.

Frank


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to