Re: Strange loop behavior

2008-03-26 Thread Diez B. Roggisch
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

2008-03-26 Thread Peter Otten
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

2008-03-26 Thread Arnaud Delobelle
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

2008-03-26 Thread Gabriel Rossetti
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

2008-03-26 Thread Arnaud Delobelle
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

2008-03-26 Thread Matt Nordhoff
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

2008-03-26 Thread Gabriel Rossetti
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