[issue31156] Stopiteration terminates while-loop

2017-08-09 Thread Günter Rote

New submission from Günter Rote:

It should be mentioned in the documentation that 

A StopIteration exception raised in the body of a while loop will terminate 
(and is caught by) the while-loop, thus leading to graceful termination.

A good place would be here:
1) https://docs.python.org/3/reference/compound_stmts.html#the-while-statement

I don't know how such a StopIteration termination of a while loop
affects the else-clause. This should be clarified.

Here:
2) https://docs.python.org/3/library/exceptions.html#StopIteration
it would be good to explicitly state:

An enclosing while-loop or for-loop acts like an implicit catch for 
StopIteration. The StopIteration exception will terminate the loop.

(I guess, a for-loop is also just terminated when the StopIteration originates 
in the BODY of the loop, although this is not the typical case.)

--
assignee: docs@python
components: Documentation
messages: 299982
nosy: Günter Rote, docs@python
priority: normal
severity: normal
status: open
title: Stopiteration terminates while-loop
type: enhancement
versions: Python 3.6

___
Python tracker 
<http://bugs.python.org/issue31156>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue31156] Stopiteration terminates while-loop

2017-08-09 Thread Günter Rote

Günter Rote added the comment:

Sorry, that was my misinterpretation of what happened.
I had been stumbling over an old program I had written, but
apparently it works because the while-loop is inside
a generator function, and the StopIteration is simply
passed on.

Here is a small demonstration example:
>>> def f():
...   for x in range(5):
... yield x
... 
>>> def g():
...   h=f()
...   while True:
...  yield next(h)+100
...  yield next(h)
... 
>>> list(g())
[100, 1, 102, 3, 104]

(I am beginning to wonder whether this program will be adversely affected by 
PEP 479 -- Change StopIteration handling inside generators.)

--
stage:  -> resolved
status: open -> closed
versions: +Python 3.4 -Python 3.6

___
Python tracker 
<http://bugs.python.org/issue31156>
___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com