Ben Finney wrote:

Another way of thinking about it is that there's no sensible sequence of
bytes to return at EOF, so the Pythonic thing to do is to raise an
exception for this exceptional circumstance.

But this is *not* what Python does, so it's obviously
not Pythonic. :-)

If f.read(n) is to mean "read n bytes, or however many are
left", and there are no bytes left, then the consistent
thing to do is to return a zero-length sequence of bytes.

I came across a situation recently where Microsoft got this
badly wrong. I was using a language that didn't have very
good file-access capabilities, and I wanted to compare the
contents of two files. So I used Scripting.FileSystemObject
via COM, and wrote something like the equivalent of

   f = open(...)
   g = open(...)
   if f.read() == g.read():
      ...

This worked fine... except when one of the files was empty,
in which case the read() call *raised an exception*!

I am very glad that Python didn't go down that route.

--
Greg
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to