bpo-34624: -W option and PYTHONWARNINGS env variable does not accept module regexes
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee=Noneclosed_at=<Date2021-12-13.23:28:26.708>created_at=<Date2021-04-16.13:06:47.083>labels= ['library', '3.10']
title='warnings: -W option and PYTHONWARNINGS now use the message as a regex'updated_at=<Date2021-12-13.23:28:26.707>user='https://github.com/vstinner'
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 forremovalin 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:
Sadly, the current -W option documentation is wrong :-( I started by writing PR 25439 to fix the documentation, before changing its behavior.
Hum, "wrong" may be too strong. I would say that it is at least misleading.
It starts with "file:line: category: message". I understood that it was the format the option, whereas it is not. Moreover, the full format is simply... not documented at all! Only the short -Waction format :-(
Activity
vstinner commented on Apr 16, 2021
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:
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:
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"):
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:
You can only try to use "module" and "lineno" parameters of a warning filter, which are more fragile and hard to use to use.
tirkarthi commented on Apr 16, 2021
See also https://bugs.python.org/issue34624
vstinner commented on Apr 16, 2021
Sadly, the current -W option documentation is wrong :-( I started by writing PR 25439 to fix the documentation, before changing its behavior.
vstinner commented on Apr 16, 2021
Hum, "wrong" may be too strong. I would say that it is at least misleading.
It starts with "file:line: category: message". I understood that it was the format the option, whereas it is not. Moreover, the full format is simply... not documented at all! Only the short -Waction format :-(
https://docs.python.org/dev/using/cmdline.html#cmdoption-W
vstinner commented on Apr 16, 2021
New changeset 62ec638 by Victor Stinner in branch 'master':
bpo-43862: Enhance -W cmdline option documentation (GH-25439)
62ec638
vstinner commented on Apr 22, 2021
I also created a thread on python-dev:
https://mail.python.org/archives/list/python-dev@python.org/thread/JMKLA4RUJLTORBPPTM4BWL76VNNMKYVG/
vstinner commented on Dec 13, 2021
I mark this issue as a duplicate of bpo-34624.