Expose Py_Py3kWarningFlag as sys.py3kwarning as discussed in #1504

Also added a warning.warnpy3k() as convenient method for Python 3.x related deprecation warnings.
This commit is contained in:
Christian Heimes 2007-11-27 23:16:44 +00:00
parent 715ec1818d
commit 28104c58d2
5 changed files with 27 additions and 3 deletions

View File

@ -200,6 +200,14 @@ Available Functions
was added in Python 2.5.) was added in Python 2.5.)
.. function:: warnpy3k(message[, category[, stacklevel]])
Issue a warning related to Python 3.x deprecation. Warnings are only shown
when Python is started with the -3 option. Like func:`warn` *message* must
be a string and *category* a subclass of :exc:`Warning`. :func:`warnpy3k`
is using :exc:`DeprecationWarning` as default warning class.
.. function:: showwarning(message, category, filename, lineno[, file]) .. function:: showwarning(message, category, filename, lineno[, file])
Write a warning to a file. The default implementation calls Write a warning to a file. The default implementation calls

View File

@ -3,9 +3,9 @@
This module is no longer required except for backward compatibility. This module is no longer required except for backward compatibility.
Objects of most types can now be created by calling the type object. Objects of most types can now be created by calling the type object.
""" """
from warnings import warn as _warn from warnings import warnpy3k as _warnpy3k
_warn("The 'new' module is not supported in 3.x, use the 'types' module " _warnpy3k("The 'new' module is not supported in 3.x, use the 'types' module "
"instead.", DeprecationWarning, 2) "instead.", stacklevel=2)
from types import ClassType as classobj from types import ClassType as classobj
from types import FunctionType as function from types import FunctionType as function

View File

@ -125,6 +125,16 @@ def warn_explicit(message, category, filename, lineno,
# Print message and context # Print message and context
showwarning(message, category, filename, lineno) showwarning(message, category, filename, lineno)
def warnpy3k(message, category=None, stacklevel=1):
"""Issue a deprecation warning for Python 3.x related changes.
Warnings are omitted unless Python is started with the -3 option.
"""
if sys.py3kwarning:
if category is None:
category = DeprecationWarning
warn(message, category, stacklevel+1)
def showwarning(message, category, filename, lineno, file=None): def showwarning(message, category, filename, lineno, file=None):
"""Hook to write a warning to a file; replace if you like.""" """Hook to write a warning to a file; replace if you like."""
if file is None: if file is None:

View File

@ -12,6 +12,8 @@ What's New in Python 2.6 alpha 1?
Core and builtins Core and builtins
----------------- -----------------
- Expose the Py_Py3kWarningFlag as sys.py3kwarning.
- Issue #1445: Fix a SystemError when accessing the ``cell_contents`` - Issue #1445: Fix a SystemError when accessing the ``cell_contents``
attribute of an empty cell object. attribute of an empty cell object.
@ -837,6 +839,8 @@ Library
Extension Modules Extension Modules
----------------- -----------------
- Added warnpy3k function to the warnings module.
- Marshal.dumps() now expects exact type matches for int, long, float, complex, - Marshal.dumps() now expects exact type matches for int, long, float, complex,
tuple, list, dict, set, and frozenset. Formerly, it would silently miscode tuple, list, dict, set, and frozenset. Formerly, it would silently miscode
subclasses of those types. Now, it raises a ValueError instead. subclasses of those types. Now, it raises a ValueError instead.

View File

@ -1167,6 +1167,8 @@ _PySys_Init(void)
PyString_FromString(Py_GetExecPrefix())); PyString_FromString(Py_GetExecPrefix()));
SET_SYS_FROM_STRING("maxint", SET_SYS_FROM_STRING("maxint",
PyInt_FromLong(PyInt_GetMax())); PyInt_FromLong(PyInt_GetMax()));
SET_SYS_FROM_STRING("py3kwarning",
PyBool_FromLong(Py_Py3kWarningFlag));
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
SET_SYS_FROM_STRING("maxunicode", SET_SYS_FROM_STRING("maxunicode",
PyInt_FromLong(PyUnicode_GetMax())); PyInt_FromLong(PyUnicode_GetMax()));