2.1 loop with try & continue -> bug?
Fernando PĂ©rez
fperez528 at yahoo.com
Thu Nov 29 11:46:37 EST 2001
Marco Beri wrote:
> Hi,
> look at this simple program:
>
[snip]
Very strange, and I'd say there appears to be a bug. Digging deeper:
from the docs we get:
******************
6.10 The continue statement
continue_stmt: "continue"
continue may only occur syntactically nested in a for or while
loop, but
not nested in a function or class definition or try statement within
that loop.6.1[1]It continues with the next cycle of the nearest
enclosing loop.
---------
Footnotes
... loop.6.1[2]
It may occur within an except or else clause. The restriction on
occurring in the try clause is implementor's laziness and will
eventually be lifted.
******************
So we know that technically you shouldn't be putting that continue in
your try. However, I found something quite bizarre. I put an extra
print in it and here's the code I ran:
print "Running..."
cont=0
while cont < 5 :
print cont
cont = cont + 1
try:
if cont == 2:
continue
if cont == 3:
print 'Break!'
break
except:
pass
Now for the strangeness: if this is run at the interactive
interpreter, the results are:
>>> print "Running..."
Running...
>>> cont=0
>>> while cont < 5 :
... print cont
... cont = cont + 1
... try:
... if cont == 2:
... continue
... if cont == 3:
... print 'Break!'
... break
... except:
... pass
...
0
1
2
Break!
3
4
However, running it at the command line with python:
Running...
0
1
2
Break!
Running...
0
1
2
Break! .... keeps going on forever, killed it with ctrl-C.
So, I suspect that the continue in the try is triggering abnormal
behavior in the python interpreter which for some reason isn't
triggered at the interactive prompt. It's ok if continue is invalid
inside try, but then an error should be raised. Having the *same*
code behave so differently between the interpreter and the
interactive prompts is a bug in my book.
Am I missing something?
Cheers,
f
More information about the Python-list
mailing list