Re: Strange loop behavior
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 -- http://mail.python.org/mailman/listinfo/python-list
Re: Strange loop behavior
Gabriel Rossetti wrote: 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)) And yes I checked, the d variable is en empty string at some point, so the looping should stop. d may be an empty string, but repr(d) isn't: d = print repr(d) '' print d Remove the two repr() calls and you should be OK. Peter -- http://mail.python.org/mailman/listinfo/python-list
Re: Strange loop behavior
On Mar 26, 8:35 am, Gabriel Rossetti [EMAIL PROTECTED] wrote: 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. No, it isn't the empty string, it is the printable representation of the empty string (because you wrap your f.read() calls in repr()), which is the string '': print '' '' Why do you wrap f.read(...) in the repr() function? If you remove the two repr() I suspect your code will work. OTOH do you know that the read() method of file objects does what you want? You could simply write: file_str = f.read() Or are there some other factors that prevent you from doing this? -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list
Re: Strange loop behavior
Gabriel Rossetti wrote: 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. Ok, I get it, the repr() function actually returns a string with quote characters around it, thus the length is never 0, but 2. The reason I began using the repr() function is that the str() and unicode() constructors didn't accept the data read, because it was bigger than ord(128) (or something like that. I'm trying to read a binary file and put it's contents in an xml message to send via the network, so that I can re-create it on the other side. I do need to keep the xml aspect though. Is there a better way of doing this? Thanks, Gabriel -- http://mail.python.org/mailman/listinfo/python-list
Re: Strange loop behavior
On Mar 26, 8:51 am, Gabriel Rossetti [EMAIL PROTECTED] wrote: Gabriel Rossetti wrote: 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. Ok, I get it, the repr() function actually returns a string with quote characters around it, thus the length is never 0, but 2. The reason I began using the repr() function is that the str() and unicode() constructors didn't accept the data read, because it was bigger than ord(128) (or something like that. I'm trying to read a binary file and put it's contents in an xml message to send via the network, so that I can re-create it on the other side. I do need to keep the xml aspect though. Is there a better way of doing this? Thanks, Gabriel Have a look at the uu and base64 modules: http://docs.python.org/lib/module-uu.html http://docs.python.org/lib/module-base64.html -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list
Re: Strange loop behavior
Gabriel Rossetti wrote: 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)) FWIW, you could do it like this to avoid duplicating that line of code: while True: d = f.read(DEFAULT_BUFFER_SIZE) if not d: break file_str.write(d) Some people would also compress the whitespace a bit: while True: d = f.read(DEFAULT_BUFFER_SIZE) if not d: break file_str.write(d) snip (I'll comment on your Unicode issues in a minute.) -- -- http://mail.python.org/mailman/listinfo/python-list
Re: Strange loop behavior
Arnaud Delobelle wrote: On Mar 26, 8:35 am, Gabriel Rossetti [EMAIL PROTECTED] wrote: 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. No, it isn't the empty string, it is the printable representation of the empty string (because you wrap your f.read() calls in repr()), which is the string '': print '' '' Why do you wrap f.read(...) in the repr() function? If you remove the two repr() I suspect your code will work. OTOH do you know that the read() method of file objects does what you want? You could simply write: file_str = f.read() Or are there some other factors that prevent you from doing this? -- Arnaud Ok, like I mentioned in my second msg, I had put repr() there because I was getting errors because the ascii range (128) was exceeded, I tried cheating and telling it it was unicode but that didn't work, so I tried repr() and it gave me a string rep. of my data, that was ok. After that I tried using StringIO instead of what I had before, a list of strings that I later joined with an empty string. I just re-tried removing the repr() and it works with the StringIO version. Thanks for all your answers, Gabriel -- http://mail.python.org/mailman/listinfo/python-list