From: Guido van Rossum Date: Sun, 22 Jul 2007 20:38:07 +0000 (+0000) Subject: Make close() (all versions) ignore IOError from flush(). X-Git-Tag: v3.0a1~594 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=33e7a8e8134e90635adb88871defc270e0043073;p=python 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. --- diff --git a/Lib/io.py b/Lib/io.py index 0054d42ea3..4dfab22ee5 100644 --- a/Lib/io.py +++ b/Lib/io.py @@ -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