diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2010-11-10 13:55:25 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2010-11-10 13:55:25 (GMT) |
commit | cf9f98034a6bc7c55486042da1867447cfd2f0b5 (patch) | |
tree | c1f4e79be6317a8ec7381c68cb3d43d5c07cfad2 | |
parent | 81c87c5e9a81728f4c7b022e3786ce11d53ed3c9 (diff) | |
download | cpython-cf9f98034a6bc7c55486042da1867447cfd2f0b5.zip cpython-cf9f98034a6bc7c55486042da1867447cfd2f0b5.tar.gz cpython-cf9f98034a6bc7c55486042da1867447cfd2f0b5.tar.bz2 |
Issue #10372: Import the warnings module only after the IO library is
initialized, so as to avoid bootstrap issues with the '-W' option.
-rw-r--r-- | Lib/test/test_warnings.py | 17 | ||||
-rw-r--r-- | Misc/NEWS | 3 | ||||
-rw-r--r-- | Python/pythonrun.c | 16 |
3 files changed, 29 insertions, 7 deletions
diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py index 52b9dbe..111ff79 100644 --- a/Lib/test/test_warnings.py +++ b/Lib/test/test_warnings.py @@ -6,6 +6,7 @@ import sys import unittest import subprocess from test import support +from test.script_helper import assert_python_ok from test import warning_tests @@ -393,6 +394,22 @@ class WCmdLineTests(unittest.TestCase): self.module._setoption('error::Warning::0') self.assertRaises(UserWarning, self.module.warn, 'convert to error') + def test_improper_option(self): + # Same as above, but check that the message is printed out when + # the interpreter is executed. This also checks that options are + # actually parsed at all. + rc, out, err = assert_python_ok("-Wxxx", "-c", "pass") + self.assertIn(b"Invalid -W option ignored: invalid action: 'xxx'", err) + + def test_warnings_bootstrap(self): + # Check that the warnings module does get loaded when -W<some option> + # is used (see issue #10372 for an example of silent bootstrap failure). + rc, out, err = assert_python_ok("-Wi", "-c", + "import sys; sys.modules['warnings'].warn('foo', RuntimeWarning)") + # '-Wi' was observed + self.assertFalse(out.strip()) + self.assertNotIn(b'RuntimeWarning', err) + class CWCmdLineTests(BaseTest, WCmdLineTests): module = c_warnings @@ -10,6 +10,9 @@ What's New in Python 3.2 Alpha 4? Core and Builtins ----------------- +- Issue #10372: Import the warnings module only after the IO library is + initialized, so as to avoid bootstrap issues with the '-W' option. + - Issue #10293: Remove obsolete field in the PyMemoryView structure, unused undocumented value PyBUF_SHADOW, and strangely-looking code in PyMemoryView_GetContiguous. diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 8b1e61a..784558c 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -299,19 +299,21 @@ Py_InitializeEx(int install_sigs) if (install_sigs) initsigs(); /* Signal handling stuff, including initintr() */ + initmain(); /* Module __main__ */ + if (initstdio() < 0) + Py_FatalError( + "Py_Initialize: can't initialize sys standard streams"); + /* Initialize warnings. */ if (PySys_HasWarnOptions()) { PyObject *warnings_module = PyImport_ImportModule("warnings"); - if (!warnings_module) - PyErr_Clear(); + if (warnings_module == NULL) { + fprintf(stderr, "'import warnings' failed; traceback:\n"); + PyErr_Print(); + } Py_XDECREF(warnings_module); } - initmain(); /* Module __main__ */ - if (initstdio() < 0) - Py_FatalError( - "Py_Initialize: can't initialize sys standard streams"); - if (!Py_NoSiteFlag) initsite(); /* Module site */ } |