From e038a71053b2456c70c11fd3be471fcd9f048ad9 Mon Sep 17 00:00:00 2001 From: "brett.cannon" Date: Thu, 14 Jan 2010 20:00:28 +0000 Subject: [PATCH] The silencing of DeprecationWarning was not taking -3 into consideration. Since Py3K warnings are DeprecationWarning by default this was causing -3 to essentially be a no-op. Now DeprecationWarning is only silenced if -3 is not used. Closes issue #7700. Thanks Ezio Melotti and Florent Xicluna for patch help. git-svn-id: http://svn.python.org/projects/python/trunk@77505 6015fed2-1504-0410-9fe1-9d1591cc4771 --- Lib/warnings.py | 7 +++++-- Misc/NEWS | 3 ++- Python/_warnings.c | 30 ++++++++++++++++++------------ 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/Lib/warnings.py b/Lib/warnings.py index a88e7ba52b..70b3d43619 100644 --- a/Lib/warnings.py +++ b/Lib/warnings.py @@ -383,8 +383,11 @@ except ImportError: # Module initialization _processoptions(sys.warnoptions) if not _warnings_defaults: - for cls in (DeprecationWarning, PendingDeprecationWarning, ImportWarning): - simplefilter("ignore", category=cls, append=True) + silence = [ImportWarning, PendingDeprecationWarning] + if not sys.py3kwarning: # Don't silence DeprecationWarning if -3 was used. + silence.append(DeprecationWarning) + for cls in silence: + simplefilter("ignore", category=cls) bytes_warning = sys.flags.bytes_warning if bytes_warning > 1: bytes_action = "error" diff --git a/Misc/NEWS b/Misc/NEWS index 2f90b5e158..16f1cdb4f5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -21,7 +21,8 @@ Core and Builtins values. Also fix a number of bugs in dtoa.c that could lead to incorrectly rounded results when converting strings to floats. -- Issue #7319: Silence DeprecationWarning by default. +- Issue #7319, #7770: Silence DeprecationWarning by default when -3 is not + used. - Issue #2335: Backport set literals syntax from Python 3.x. diff --git a/Python/_warnings.c b/Python/_warnings.c index 96bb0493c9..f3b2286e69 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -839,31 +839,37 @@ create_filter(PyObject *category, const char *action) static PyObject * init_filters(void) { - PyObject *filters = PyList_New(4); + // Don't silence DeprecationWarning if -3 was used. + PyObject *filters = PyList_New(Py_Py3kWarningFlag ? 3 : 4); + unsigned int pos = 0; // Post-incremented in each use. + unsigned int x; const char *bytes_action; + if (filters == NULL) return NULL; - PyList_SET_ITEM(filters, 0, - create_filter(PyExc_DeprecationWarning, "ignore")); - PyList_SET_ITEM(filters, 1, + if (!Py_Py3kWarningFlag) { + PyList_SET_ITEM(filters, pos++, + create_filter(PyExc_DeprecationWarning, "ignore")); + } + PyList_SET_ITEM(filters, pos++, create_filter(PyExc_PendingDeprecationWarning, "ignore")); - PyList_SET_ITEM(filters, 2, create_filter(PyExc_ImportWarning, "ignore")); + PyList_SET_ITEM(filters, pos++, + create_filter(PyExc_ImportWarning, "ignore")); if (Py_BytesWarningFlag > 1) bytes_action = "error"; else if (Py_BytesWarningFlag) bytes_action = "default"; else bytes_action = "ignore"; - PyList_SET_ITEM(filters, 3, create_filter(PyExc_BytesWarning, + PyList_SET_ITEM(filters, pos++, create_filter(PyExc_BytesWarning, bytes_action)); - if (PyList_GET_ITEM(filters, 0) == NULL || - PyList_GET_ITEM(filters, 1) == NULL || - PyList_GET_ITEM(filters, 2) == NULL || - PyList_GET_ITEM(filters, 3) == NULL) { - Py_DECREF(filters); - return NULL; + for (x = 0; x < pos; x += 1) { + if (PyList_GET_ITEM(filters, x) == NULL) { + Py_DECREF(filters); + return NULL; + } } return filters; -- 2.11.4.GIT