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 0f2e089..fb01b83 100644
--- a/Lib/test/test_warnings.py
+++ b/Lib/test/test_warnings.py
@@ -631,6 +631,15 @@
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 5d5c9a9..3a8fc5d 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -11,6 +11,9 @@
"""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: