New submission from STINNER Victor <[email protected]>:
I propose to change the -W command line option and the PYTHONWARNINGS
environment variable to use the message as a regular expression in Python 3.10.
Or does anyone have a reason to keep the current behavior as it is?
--
Python provides two ways to specify warnings filters:
* -W command line option: can be used multiple times
* PYTHONWARNINGS environment variable: can contain multiple options separated
by commas
While the Python API warnings.filterwarnings(action, message="", ...) uses the
message as a regular expression, -W and PYTHONWARNINGS require to match
*exactly* the *whole* message.
For example, if you only want to ignore the new distutils deprecation warning,
you must write exactly:
$ ./python -X dev -W 'ignore:The distutils package is deprecated and slated for
removal in Python 3.12. Use setuptools or check PEP 632 for potential
alternatives:DeprecationWarning' -c 'import distutils'
I use -X dev to show DeprecationWarning, or you can also use -Wdefault if you
prefer.
If the deprecation warning changes in Python or if you have a single typo, the
warning is not ignored. Example with a typo ("3.13" rather than "3.12"):
$ ./python -X dev -W 'ignore:The distutils package is deprecated and slated for
removal in Python 3.13. Use setuptools or check PEP 632 for potential
alternatives:DeprecationWarning' -c 'import distutils'
<string>:1: DeprecationWarning: The distutils package is deprecated and slated
for removal in Python 3.12. Use setuptools or check PEP 632 for potential
alternatives
The PYTHONWARNINGS has another limitation: you cannot specify a message if it
contains a comma (","). Hopefully, Python doesn't raise warnings containing
comma, right? Well... Just one example:
Lib/distutils/sysconfig.py:554: warnings.warn('SO is deprecated, use
EXT_SUFFIX', DeprecationWarning, 2)
You cannot only ignore the message:
$ PYTHONWARNINGS='ignore:SO is deprecated, use EXT_SUFFIX:DeprecationWarning'
./python -c 'import sys; print(sys.warnoptions); print(len(sys.warnoptions))'
Invalid -W option ignored: invalid action: 'use EXT_SUFFIX'
['ignore:SO is deprecated', ' use EXT_SUFFIX:DeprecationWarning']
2
You can only try to use "module" and "lineno" parameters of a warning filter,
which are more fragile and hard to use to use.
----------
components: Library (Lib)
messages: 391190
nosy: vstinner
priority: normal
severity: normal
status: open
title: warnings: -W option and PYTHONWARNINGS now use the message as a regex
versions: Python 3.10
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue43862>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com