<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Hi all,</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">I just tried the new possibilities in writing generators which were included since python3.3 into the python standard.</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="color:rgb(0,0,0)"><span style="font-family:tahoma,sans-serif">Concretely, using </span><font face="courier new, monospace">return 1</font><font face="tahoma, sans-serif">  in a generator is equal to </font><font face="courier new, monospace">raise StopIteration(1)</font></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Thus the following works:</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="color:rgb(0,0,0)"><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="color:rgb(0,0,0)"><font face="courier new, monospace">>>> def f():</font></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="color:rgb(0,0,0)"><font face="courier new, monospace">...     yield 0</font></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="color:rgb(0,0,0)"><font face="courier new, monospace">...     return 1</font></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="color:rgb(0,0,0)"><font face="courier new, monospace">>>> g = f()</font></div><div class="gmail_default" style="color:rgb(0,0,0)"><font face="courier new, monospace">>>> next(g)</font></div><div class="gmail_default" style="color:rgb(0,0,0)"><font face="courier new, monospace">0</font></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="color:rgb(0,0,0)"><font face="courier new, monospace">>>> next(g)</font></div><div class="gmail_default" style="color:rgb(0,0,0)"><font face="courier new, monospace"><div class="gmail_default">Traceback (most recent call last):</div><div class="gmail_default">  File "<stdin>", line 1, in <module></div><div class="gmail_default">StopIteration: 1</div><div class="gmail_default"><br></div></font></div></blockquote></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">however calling next(g) once again gives the following:</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="color:rgb(0,0,0)"><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><font face="courier new, monospace">>>> next(g)</font></div><div class="gmail_default"><font face="courier new, monospace">Traceback (most recent call last):</font></div><div class="gmail_default"><font face="courier new, monospace">  File "<stdin>", line 1, in <module></font></div><div class="gmail_default"><font face="courier new, monospace">StopIteration</font></div></div></blockquote></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="color:rgb(0,0,0)"><span style="font-family:tahoma,sans-serif">mind the missing </span><span style="font-family:'courier new',monospace">StopIteration: </span><font face="courier new, monospace">1</font><font face="tahoma, sans-serif"> . In my impression this is not like I intuitively think about a generator. If there is a </font><font face="courier new, monospace">StopIteration</font><font face="tahoma, sans-serif"> Exception connected to a generator, then there should be only ONE such.</font></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)"><br></div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">This is not only theoretical, but would have a real application using such generator in for loops. At the moment the following happens:</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)"><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><font face="courier new, monospace">>>> g = f()</font></div></div></blockquote><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><font face="courier new, monospace">>>> for e in g:</font></div></div><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><font face="courier new, monospace">...     print(e)</font></div></div><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><font face="courier new, monospace">...</font></div><div class="gmail_default"><font face="courier new, monospace">0</font></div></div><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><div class="gmail_default"><font face="courier new, monospace">>>> next(g)</font></div></div></div><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><div class="gmail_default"><font face="courier new, monospace">Traceback (most recent call last):</font></div></div></div><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><div class="gmail_default"><font face="courier new, monospace">  File "<stdin>", line 1, in <module></font></div></div></div><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default"><div class="gmail_default"><font face="courier new, monospace">StopIteration</font></div></div></div></blockquote><div class="gmail_default" style="color:rgb(0,0,0)"><div class="gmail_default" style="font-family:tahoma,sans-serif"><div><br></div></div><div class="gmail_default"><font face="tahoma, sans-serif">Remind again the missing </font><font face="courier new, monospace">StopIteration: 1</font><font face="tahoma, sans-serif"> .   If the same </font><font face="courier new, monospace">StopIteration</font><font face="tahoma, sans-serif"> would be thrown at every call when </font><font face="courier new, monospace">g</font><font face="tahoma, sans-serif"> is empty, one could actually extract the return value (without using some maybe possible but more complicated </font><font face="courier new, monospace">return_value = yield from </font><font face="tahoma, sans-serif"> work arrounds).</font></div><div class="gmail_default"><font face="tahoma, sans-serif"><br></font></div><div class="gmail_default"><font face="tahoma, sans-serif"><br></font></div><div class="gmail_default"><font face="tahoma, sans-serif">Any feedbacks?</font></div><div class="gmail_default"><font face="tahoma, sans-serif">Are there others thinking that this would be a straightforward extension to the newly introduced </font><font face="courier new, monospace">raise StopIteration(return_value) </font><font face="tahoma, sans-serif">feature?</font></div><div class="gmail_default"><font face="tahoma, sans-serif"><br></font></div><div class="gmail_default"><font face="tahoma, sans-serif"><br></font></div><div class="gmail_default"><font face="tahoma, sans-serif"><br></font></div><div class="gmail_default"><font face="tahoma, sans-serif">looking forward to your responses,</font></div><div class="gmail_default"><font face="tahoma, sans-serif">with best wishes,</font></div><div class="gmail_default"><font face="tahoma, sans-serif"><br></font></div><div class="gmail_default"><font face="tahoma, sans-serif">Stephan</font></div></div></div>