[Python-Dev] PEP 492: __aiter__ should return async iterator directly instead of awaitable

Yury Selivanov yselivanov.ml at gmail.com
Mon Jun 6 16:05:53 EDT 2016



On 2016-06-06 4:02 PM, Łukasz Langa wrote:
>> The proposed patch fixes the __aiter__ in a backwards compatible way:
>>
>> 1. ceval/GET_AITER opcode calls the __aiter__ method.
>>
>> 2. If the returned object has an '__anext__' method, GET_AITER 
>> silently wraps it in an awaitable, which is equivalent to the 
>> following coroutine:
>>
>>    async def wrapper(aiter_result):
>>        return aiter_result
>>
>> 3. If the returned object does not have an '__anext__' method, a 
>> DeprecationWarning is raised.
>
> There’s a problem with this approach. It will force people to write 
> deprecated code because you never know if your library is going to run 
> on 3.5.0 or 3.5.1. Barry, Ubuntu wily, xenial and yakkety currently 
> package 3.5.0 or 3.5.1. When 3.5.2 is going to get released, are they 
> going to get it? I’m pretty sure wily *isn’t* and yakkety *is* but 
> just wanted to confirm; especially with xenial being an LTS release.
>

Yes, I agree. OTOH, I don't see any other way of resolving this.

Another option would be to start raising the DeprecationWarning only in 3.6.

Yury


More information about the Python-Dev mailing list