diff -r 9e59cb403efa Lib/gzip.py --- a/Lib/gzip.py Tue Sep 27 11:37:10 2016 +0300 +++ b/Lib/gzip.py Tue Sep 27 17:00:17 2016 +0300 @@ -167,6 +167,10 @@ class GzipFile(_compression.BaseStream): filename = '' if mode is None: mode = getattr(fileobj, 'mode', 'rb') + if not mode.startswith('r'): + import warnings + warnings.warn("specify explicit mode for writing", + DeprecationWarning, 2) if mode.startswith('r'): self.mode = READ diff -r 9e59cb403efa Lib/test/test_gzip.py --- a/Lib/test/test_gzip.py Tue Sep 27 11:37:10 2016 +0300 +++ b/Lib/test/test_gzip.py Tue Sep 27 17:00:17 2016 +0300 @@ -418,6 +418,30 @@ class TestGzip(BaseTest): with gzip.GzipFile(fileobj=f, mode="w") as g: pass + def test_fileobj_mode(self): + gzip.GzipFile(self.filename, "wb").close() + with open(self.filename, "r+b") as f: + with gzip.GzipFile(fileobj=f, mode='r') as g: + self.assertEqual(g.mode, gzip.READ) + with gzip.GzipFile(fileobj=f, mode='w') as g: + self.assertEqual(g.mode, gzip.WRITE) + with gzip.GzipFile(fileobj=f, mode='a') as g: + self.assertEqual(g.mode, gzip.WRITE) + with gzip.GzipFile(fileobj=f, mode='x') as g: + self.assertEqual(g.mode, gzip.WRITE) + for mode in "rb", "r+b": + with open(self.filename, mode) as f: + with gzip.GzipFile(fileobj=f) as g: + self.assertEqual(g.mode, gzip.READ) + for mode in "wb", "ab", "xb": + if "x" in mode: + support.unlink(self.filename) + with open(self.filename, mode) as f: + with self.assertWarns(DeprecationWarning): + g = gzip.GzipFile(fileobj=f) + with g: + self.assertEqual(g.mode, gzip.WRITE) + def test_bytes_filename(self): str_filename = self.filename try: