Strange loop behavior

Diez B. Roggisch deets at nospam.web.de
Wed Mar 26 04:42:06 EDT 2008


Gabriel Rossetti schrieb:
> Hello,
> 
> I wrote a program that reads data from a file and puts it in a string, 
> the problem is that it loops infinitely and that's not wanted, here is 
> the code :
> 
>    d = repr(f.read(DEFAULT_BUFFER_SIZE))
>    while d != "":
>        file_str.write(d)
>        d = repr(f.read(DEFAULT_BUFFER_SIZE))
> 
> I also tried writing the while's condition like so : len(d) > 0, but 
> that doesn't change anything. I tried step-by-step debugging using 
> PyDev(eclipse plugin) and I noticed this, once the while was read once, 
> it is never re-read, basically, the looping does happen, but just in 
> between the two lines in the loop's body/block, it never goes on the 
> while and thus never verifies the condition and thus loops forever. I 
> had been using psyco (a sort of JIT for python) and so I uninstalled it 
> and restarted eclipse and I still get the same thing. This looks like 
> some bug, but I may be wrong, does anybody understand what's going on here?
> 
> Thanks,
> Gabriel
> 
> PS
> And yes I checked, the "d" variable is en empty string at some point, so 
> the looping should stop.

But you used a superfluous repr. Look at this:

 >>> repr("")
"''"
 >>> repr("") == ""
False
 >>>

So - get rid of the useless repr, then things should work.


Regarding the behavior in the debugger: that's an artifact of the 
debugger that it doesn't step into that line, it doesn't change the way 
the code works.

Diez



More information about the Python-list mailing list