You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
while else loop seems to behave incorrectly #46215
Python 3.0a2 (r30a2:59382, Dec 17 2007, 08:47:22)
[GCC 4.1.2 20070626 (Red Hat 4.1.2-13)] on linux2
IDLE 3.0a1
This seems wrong:
>>> whileFalse:
print("no")
else:
print("yes")
>>
I expected it to print "yes" because the docs say that the else suite is
executed if present and if the loop terminated normally (no break), and
this is the case here.
This works though:
>>> x =False
>>> while x:
print("no")
else:
print("yes")
yes
>>
So it seems that "while False" and "while variable" are giving different
behaviour.
python 2.5 has the same behaviour, if you use "while 0:" instead.
In compiler.c, there is code that optimizes away blocks like "if 0",
"while 0". 'if' correctly emit the else clause, 'while' does not...
In my opinion this is a serious bug in the core language. I'm not sure
whether it's serious enough to be considered a showstopper for 2.5.2.
In any case, I'm raising the priority to get more eyes on this before
2.5.2.
Activity
mark-summerfield commentedon Jan 24, 2008
I am using:
Python 3.0a2 (r30a2:59382, Dec 17 2007, 08:47:22)
[GCC 4.1.2 20070626 (Red Hat 4.1.2-13)] on linux2
IDLE 3.0a1
This seems wrong:
I expected it to print "yes" because the docs say that the else suite is
executed if present and if the loop terminated normally (no break), and
this is the case here.
This works though:
yes
So it seems that "while False" and "while variable" are giving different
behaviour.
amauryfa commentedon Jan 24, 2008
python 2.5 has the same behaviour, if you use "while 0:" instead.
In compiler.c, there is code that optimizes away blocks like "if 0",
"while 0". 'if' correctly emit the else clause, 'while' does not...
mdickinson commentedon Jan 24, 2008
This bug is also present in the trunk, with while 0 instead of while
False.
This appears closely related to issue bpo-1875.
In my opinion this is a serious bug in the core language. I'm not sure
whether it's serious enough to be considered a showstopper for 2.5.2.
In any case, I'm raising the priority to get more eyes on this before
2.5.2.
amauryfa commentedon Jan 24, 2008
Here is a patch, made against py3k; it should apply cleanly to the trunk.
On the 2.5 branch, compile.c seems identical, but test_grammar.py looks
very different; the conversion should be easy.
Can someone review and apply it? I don't have svn access at the moment.
mdickinson commentedon Jan 25, 2008
Looks like Amaury found his svn access. Is it okay to close this now?
mdickinson commentedon Jan 25, 2008
Forgot to say: Amaury checked his fix in in revision bpo-60265 (trunk) and
revision bpo-60268 (Python 2.5).
Thanks for the bug report, Mark!