From 33e7a8e8134e90635adb88871defc270e0043073 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Sun, 22 Jul 2007 20:38:07 +0000 Subject: [PATCH] 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. --- Lib/io.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) 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 -- 2.40.0