From: Serhiy Storchaka Date: Wed, 10 Dec 2014 20:59:55 +0000 (+0200) Subject: Issue #23016: A warning no longer produces AttributeError when the program X-Git-Tag: v3.4.3rc1~241 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=60599525c509a962e8fb5897240d42a56c092961;p=thirdparty%2FPython%2Fcpython.git Issue #23016: A warning no longer produces AttributeError when the program is run with pythonw.exe. --- diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py index 0f2e089408cc..fb01b83e0c86 100644 --- a/Lib/test/test_warnings.py +++ b/Lib/test/test_warnings.py @@ -631,6 +631,15 @@ class _WarningsTests(BaseTest, unittest.TestCase): finally: globals_dict['__file__'] = oldfile + def test_stderr_none(self): + rc, stdout, stderr = assert_python_ok("-c", + "import sys; sys.stderr = None; " + "import warnings; warnings.simplefilter('always'); " + "warnings.warn('Warning!')") + self.assertEqual(stdout, b'') + self.assertNotIn(b'Warning!', stderr) + self.assertNotIn(b'Error', stderr) + class WarningsDisplayTests(BaseTest): diff --git a/Lib/warnings.py b/Lib/warnings.py index 5d5c9a9dcbc5..3a8fc5db6516 100644 --- a/Lib/warnings.py +++ b/Lib/warnings.py @@ -11,6 +11,9 @@ def showwarning(message, category, filename, lineno, file=None, line=None): """Hook to write a warning to a file; replace if you like.""" if file is None: file = sys.stderr + if file is None: + # sys.stderr is None when ran with pythonw.exe - warnings get lost + return try: file.write(formatwarning(message, category, filename, lineno, line)) except OSError: diff --git a/Misc/NEWS b/Misc/NEWS index 4807dc4065e1..d4cd62eb23c2 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -39,6 +39,9 @@ Core and Builtins Library ------- +- Issue #23016: A warning no longer produces an AttributeError when the program + is run with pythonw.exe. + - Issue #21775: shutil.copytree(): fix crash when copying to VFAT. An exception handler assumed that that OSError objects always have a 'winerror' attribute. That is not the case, so the exception handler itself raised AttributeError