On Wed, Sep 8, 2021 at 12:49 PM Yury Selivanov <yseliva...@gmail.com> wrote:

> We have already merged it, the fix is part of the rc2.
>

Thanks! (If we were on Discourse I would have left a ♥ instead 😃)


>
> yury
>
>
> On Wed, Sep 8 2021 at 12:48 PM, Brett Cannon <br...@python.org> wrote:
>
>> On Thu, Sep 2, 2021 at 7:43 PM Yury Selivanov <yselivanov...@gmail.com>
>> wrote:
>>
>>> Comments inlined:
>>>
>>> On Thu, Sep 2, 2021 at 6:23 PM Guido van Rossum <gu...@python.org>
>>> wrote:
>>>
>>>> First of all, we should ping Yury, who implemented `async for` about 6
>>>> years ago (see PEP 492), and Joshua Bronson, who implemented aiter() and
>>>> anext() about 5 months ago (see https://bugs.python.org/issue31861).
>>>> I've CC'ed them here.
>>>>
>>>
>>> Looks like PyAiter_Check was added along with the aiter/anext builtins.
>>> I agree it's unnecessary to check for __aiter__ in it, so I let's just fix
>>> it.
>>>
>>>
>>>
>>>>
>>>> My own view:
>>>>
>>>> A. iter() doesn't check that the thing returned implements __next__,
>>>> because it's not needed -- iterators having an __iter__ methor is a
>>>> convention, not a requirement.
>>>>
>>>
>>> Yeah.
>>>
>>>
>>>> You shouldn't implement __iter__ returning something that doesn't
>>>> implement __iter__ itself, because then "for x in iter(a)" would fail even
>>>> though "for x in a" works. But you get an error, and anyone who implements
>>>> something like that (or uses it) deserves what they get. People know about
>>>> this convention and the ABC enforces it, so in practice it will be very
>>>> rare that someone gets bitten by this.
>>>>
>>>> B. aiter() shouldn't need to check either, for exactly the same reason.
>>>> I *suspect* (but do not know) that the extra check for the presence of
>>>> __iter__ is simply an attempt by the implementer to enforce the convention.
>>>> There is no *need* other than ensuring that "async for x in aiter(a)" works
>>>> when "async for x in a" works.
>>>>
>>>
>>> I agree.
>>>
>>
>> [SNIP]
>>
>>
>>
>>> Bottom line: let's fix PyAiter_Check to only look for __anext__. It's a
>>> new function so we can still fix it to reflect PyIter_Check and not worry
>>> about anything.
>>>
>>
>> I don't know if Pablo wants such a change in 3.10 since we are at rc2 at
>> this point, so this might have to wait for 3.11 (although there's no
>> deprecation here since it's a loosening of requirements so it could go in
>> straight away).
>>
>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/3ZNA6R65UG26OHB5CNVRWN7YBJYMXV7U/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to