diff options
author | Guido van Rossum <guido@python.org> | 2007-07-22 20:38:07 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2007-07-22 20:38:07 (GMT) |
commit | 33e7a8e8134e90635adb88871defc270e0043073 (patch) | |
tree | bff6c8ebe833d833636d4e0791cf72c927766586 | |
parent | ca73d496ecd5d7addaf3190459e327040958c7a3 (diff) | |
download | cpython-33e7a8e8134e90635adb88871defc270e0043073.zip cpython-33e7a8e8134e90635adb88871defc270e0043073.tar.gz cpython-33e7a8e8134e90635adb88871defc270e0043073.tar.bz2 |
Make close() (all versions) ignore IOError from flush().
This makes test_resource.py pass, and I think it's the right thing
to do: if you're closing a file after encountering an I/O error
there's nothing you can do about it. If you want the error, you
can call flush() yourself.
-rw-r--r-- | Lib/io.py | 15 |
1 files changed, 11 insertions, 4 deletions
@@ -229,8 +229,9 @@ class IOBase: if not self.__closed: try: self.flush() - finally: - self.__closed = True + except IOError: + pass # If flush() fails, just give up + self.__closed = True def __del__(self) -> None: """Destructor. Calls close().""" @@ -598,7 +599,10 @@ class _BufferedIOMixin(BufferedIOBase): def close(self): if not self.closed: - self.flush() + try: + self.flush() + except IOError: + pass # If flush() fails, just give up self.raw.close() ### Inquiries ### @@ -1048,7 +1052,10 @@ class TextIOWrapper(TextIOBase): self._telling = self._seekable def close(self): - self.flush() + try: + self.flush() + except: + pass # If flush() fails, just give up self.buffer.close() @property |