It'll probably be easier to change the warnings filter semantic (https://docs.python.org/3/library/warnings.html#the-warnings-filter) to which those values are directly passed.
On 16.04.2021 16:07, Victor Stinner wrote:
Hi, 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? I created https://bugs.python.org/issue43862 for this change. -- 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. Victor
-- Regards, Ivan _______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/ADUDHMNJIYERRA5MHF4GGB2OXV2XJC37/ Code of Conduct: http://python.org/psf/codeofconduct/