[Python-checkins] bpo-32088: Display Deprecation in debug mode (#4474)

Łukasz Langa webhook-mailer at python.org
Mon Nov 20 12:47:07 EST 2017


https://github.com/python/cpython/commit/895862aa01793a26e74512befb0c66a1da2587d6
commit: 895862aa01793a26e74512befb0c66a1da2587d6
branch: master
author: Victor Stinner <victor.stinner at gmail.com>
committer: Łukasz Langa <lukasz at langa.pl>
date: 2017年11月20日T18:47:03+01:00
summary:
bpo-32088: Display Deprecation in debug mode (#4474)
When Python is build is debug mode (Py_DEBUG), DeprecationWarning,
PendingDeprecationWarning and ImportWarning warnings are now
displayed by default.
test_venv: run "-m pip" and "-m ensurepip._uninstall" with -W
ignore::DeprecationWarning since pip code is not part of Python.
files:
A Misc/NEWS.d/next/Library/2017-11-20-15-28-31.bpo-32088.mV-4Nu.rst
M Lib/test/test_venv.py
M Lib/warnings.py
M Python/_warnings.c
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
index 2d76e65271b..c5504267706 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -369,7 +369,9 @@ def do_test_with_pip(self, system_site_packages):
 self.fail(msg.format(exc, details))
 # Ensure pip is available in the virtual environment
 envpy = os.path.join(os.path.realpath(self.env_dir), self.bindir, self.exe)
- cmd = [envpy, '-Im', 'pip', '--version']
+ # Ignore DeprecationWarning since pip code is not part of Python
+ cmd = [envpy, '-W', 'ignore::DeprecationWarning', '-I',
+ '-m', 'pip', '--version']
 p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
 stderr=subprocess.PIPE)
 out, err = p.communicate()
@@ -386,7 +388,8 @@ def do_test_with_pip(self, system_site_packages):
 # http://bugs.python.org/issue19728
 # Check the private uninstall command provided for the Windows
 # installers works (at least in a virtual environment)
- cmd = [envpy, '-Im', 'ensurepip._uninstall']
+ cmd = [envpy, '-W', 'ignore::DeprecationWarning', '-I',
+ '-m', 'ensurepip._uninstall']
 with EnvironmentVarGuard() as envvars:
 p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
 stderr=subprocess.PIPE)
diff --git a/Lib/warnings.py b/Lib/warnings.py
index a1f774637a2..48d5e163d13 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -508,10 +508,13 @@ def _filters_mutated():
 # Module initialization
 _processoptions(sys.warnoptions)
 if not _warnings_defaults:
- silence = [ImportWarning, PendingDeprecationWarning]
- silence.append(DeprecationWarning)
- for cls in silence:
- simplefilter("ignore", category=cls)
+ py_debug = hasattr(sys, 'gettotalrefcount')
+ if not py_debug:
+ silence = [ImportWarning, PendingDeprecationWarning]
+ silence.append(DeprecationWarning)
+ for cls in silence:
+ simplefilter("ignore", category=cls)
+
 bytes_warning = sys.flags.bytes_warning
 if bytes_warning > 1:
 bytes_action = "error"
@@ -520,8 +523,9 @@ def _filters_mutated():
 else:
 bytes_action = "ignore"
 simplefilter(bytes_action, category=BytesWarning, append=1)
+
 # resource usage warnings are enabled by default in pydebug mode
- if hasattr(sys, 'gettotalrefcount'):
+ if py_debug:
 resource_action = "always"
 else:
 resource_action = "ignore"
diff --git a/Misc/NEWS.d/next/Library/2017-11-20-15-28-31.bpo-32088.mV-4Nu.rst b/Misc/NEWS.d/next/Library/2017-11-20-15-28-31.bpo-32088.mV-4Nu.rst
new file mode 100644
index 00000000000..fda75d7745e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-11-20-15-28-31.bpo-32088.mV-4Nu.rst
@@ -0,0 +1,3 @@
+warnings: When Python is build is debug mode (``Py_DEBUG``),
+:exc:`DeprecationWarning`, :exc:`PendingDeprecationWarning` and
+:exc:`ImportWarning` warnings are now displayed by default.
diff --git a/Python/_warnings.c b/Python/_warnings.c
index d0f3941ba43..8cfae76a50f 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -1196,7 +1196,11 @@ create_filter(PyObject *category, const char *action)
 static PyObject *
 init_filters(void)
 {
+#ifndef Py_DEBUG
 PyObject *filters = PyList_New(5);
+#else
+ PyObject *filters = PyList_New(2);
+#endif
 unsigned int pos = 0; /* Post-incremented in each use. */
 unsigned int x;
 const char *bytes_action, *resource_action;
@@ -1204,12 +1208,15 @@ init_filters(void)
 if (filters == NULL)
 return NULL;
 
+#ifndef Py_DEBUG
 PyList_SET_ITEM(filters, pos++,
 create_filter(PyExc_DeprecationWarning, "ignore"));
 PyList_SET_ITEM(filters, pos++,
 create_filter(PyExc_PendingDeprecationWarning, "ignore"));
 PyList_SET_ITEM(filters, pos++,
 create_filter(PyExc_ImportWarning, "ignore"));
+#endif
+
 if (Py_BytesWarningFlag > 1)
 bytes_action = "error";
 else if (Py_BytesWarningFlag)


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /