the way to make an (aysnc)generator that immediately raises 
Stop(Async)Iteration immediately is to insert an unreachable `yield` statement, 
however there's two ways to do it:

    def example():
        if False:
            yield

or:


    def example():
        return
        yield

currently test_asyncgen.py uses both, eg:

            @types.coroutine
            def __anext__(self):
                if False:
                    yield "this is a generator-based coroutine"
                if self.yielded >= 2:
                    raise StopAsyncIteration()
                else:
                    self.yielded += 1
                    return self.yielded

or:


        async def agenfn():
            try:
                await _async_yield(1)
            except MyError:
                await _async_yield(2)
            return
            yield

the `if False: yield` version has a disadvantage in that it can be anywhere in 
the function, if this one is chosen then an additional caveat is that it should 
be the first two statements in a function
if `return; yield` version has an disadvantage in that the unreachable yield 
could be inserted after any `return`, if this one is chosen then an additional 
caveat is that it should be the last two statements in a function and de-dented 
as much as syntactically possible.

Which alternative do you prefer? I prefer `return; yield`
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/XUGWXWD7VBJWXBJWEGFT3OUEXCAL5GMT/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to