diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 8a69988..6c40cb9 100755
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1628,19 +1628,22 @@
         except (ImportError, AttributeError):
             raise CompressionError("gzip module is not available")
 
-        extfileobj = fileobj is not None
         try:
             fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj)
+        except OSError:
+            if fileobj is not None and mode == 'r':
+                raise ReadError("not a gzip file")
+            raise
+
+        try:
             t = cls.taropen(name, mode, fileobj, **kwargs)
-        except IOError:
-            if not extfileobj and fileobj is not None:
-                fileobj.close()
-            if fileobj is None:
-                raise
-            raise ReadError("not a gzip file")
+        except OSError:
+            fileobj.close()
+            if mode == 'r':
+                raise ReadError("not a gzip file")
+            raise
         except:
-            if not extfileobj and fileobj is not None:
-                fileobj.close()
+            fileobj.close()
             raise
         t._extfileobj = False
         return t
@@ -1665,7 +1668,9 @@
             t = cls.taropen(name, mode, fileobj, **kwargs)
         except (IOError, EOFError):
             fileobj.close()
-            raise ReadError("not a bzip2 file")
+            if mode == 'r':
+                raise ReadError("not a bzip2 file")
+            raise
         t._extfileobj = False
         return t
 
@@ -1688,7 +1693,9 @@
             t = cls.taropen(name, mode, fileobj, **kwargs)
         except (lzma.LZMAError, EOFError):
             fileobj.close()
-            raise ReadError("not an lzma file")
+            if mode == 'r':
+                raise ReadError("not an lzma file")
+            raise
         t._extfileobj = False
         return t
 
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index ceaa3aa..f22b908 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -1155,6 +1155,22 @@
         finally:
             os.chdir(cwd)
 
+    def test_open_nonwritable_fileobj(self):
+        for exctype in OSError, EOFError, RuntimeError:
+            class BadFile(io.BytesIO):
+                first = True
+                def write(self, data):
+                    if self.first:
+                        self.first = False
+                        raise exctype
+
+            f = BadFile()
+            with self.assertRaises(exctype):
+                tar = tarfile.open(tmpname, self.mode, fileobj=f,
+                                   format=tarfile.PAX_FORMAT,
+                                   pax_headers={'non': 'empty'})
+            self.assertFalse(f.closed)
+
 class GzipWriteTest(GzipTest, WriteTest):
     pass
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 839e8fe..533d5c5 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -43,6 +43,8 @@
 Library
 -------
 
+- Issue #20243: TarFile no longer raise ReadError when opened in write mode.
+
 - Issue #20238: TarFile opened with external fileobj and "w:gz" mode didn't
   write complete output on close.
 
