Reading python io.IOBase class documentation, I'm kind of confused at the
expected behavior of operation on a closed file object.

The io.IOBase class doc says:
"""Note that calling any method (even inquiries) on a closed stream is
undefined. Implementations may raise
IOError<exceptions.html#exceptions.IOError>in this case."""

But the io.IOBase.close() method document says:
"""Once the file is closed, any operation on the file (e.g. reading or
writing) will raise an IOError <exceptions.html#exceptions.IOError>."""
which unlike the class doc is not conditional about the behavior...

Experimentation (see below) show that I get a ValueError in practice (python
3.1) with io.BufferedWriter and io.StringIO objects.

So which one is right? Am I reading the wrong documentation?

>>> with open( 'dummy', 'wb') as f:
...     pass
...
>>> f.write( b'' )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: write to closed file
>>> f.writable()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file

>>> import io
>>> s = io.StringIO()
>>> s.close()
>>> s.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to