<div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Dear 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 found a BUG in the standard while statement, which appears both in python 2.7 and python 3.4 on my system.</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)">It usually won't appear because I only stumbled upon it after trying to implement a nice repeat structure. Look:</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">​```​</div>class repeat(object):<br>    def __init__(self, n):<br>        self.n = n<br><br>    def __bool__(self):<br>        self.n -= 1<br>        return self.n >= 0<br><br>    __nonzero__=__bool__<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)">a = repeat(2)</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">the meaning of the above is that bool(a) returns True 2-times, and after that always False.</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)">Now executing</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">while a:</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">    print('foo')</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">will in fact print 'foo' two times. HOWEVER ;-) ....</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">while repeat(2):</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">    print('foo')</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">```</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">will go on and go on, printing 'foo' until I kill it.<br></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)">Please comment, explain or recommend this further if you also think that both while statements should behave identically.</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)">hoping for responses,</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">best,</div><div class="gmail_default" style="font-family:tahoma,sans-serif;color:rgb(0,0,0)">Stephan</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)"><br></div></div>