-W 如何与 DeprecationWarning 和 PendingDeprecationWarning 交互?
How does -W interact with DeprecationWarning and PendingDeprecationWarning?
如何使用 DeprecationWarning
和 PendingDeprecationWarning
通知 developers/tests(但不是最终用户)即将弃用以及 python foo.py -W
控件?
下面的代码片段是一个孤立的重现,它没有像我预期的那样工作,但我也不知道如何让 -W
工作。
test_deprecation.py
from warnings import warn
def warningfunction():
warn("this is deprecated", DeprecationWarning, 2)
def pendingfunction():
warn("pending", PendingDeprecationWarning, 2)
def test_warning():
warningfunction()
def test_pending():
pendingfunction()
if __name__ == '__main__':
warningfunction()
pendingfunction()
运行 与 pytest test_deprecation.py -vv
一样,这两个警告都符合预期。至少这个不错!
运行 as python test_deprecation.py
,只得到第一个警告(因为它在 main 中)。这也是我所期望的!
运行 as python test_deprecation.py -Wa
,仍然只得到第一个警告。这是我不期望的部分。 -Wa
不是应该打开所有警告吗?
运行 as python test_deprecation.py -Wi
(忽略警告),仍然只得到第一个警告。也不负众望。 -Wi
不是应该忽略所有警告吗?
-Wdefault # Warn once per call location
-Werror # Convert to exceptions
-Walways # Warn every time
-Wmodule # Warn once per calling module
-Wonce # Warn once per Python process
-Wignore # Never warn
The action names can be abbreviated as desired (e.g. -Wi, -Wd, -Wa, -We) and the interpreter will resolve them to the appropriate action name.
来自 https://docs.python.org/3/using/cmdline.html#cmdoption-w
(python3.8 顺便说一下)
echo $PYTHONWARNINGS
为空
您将 -Wa
和 -Wi
作为参数传递给脚本。您需要将它们放在脚本名称之前,以将它们视为解释器本身的选项。
如何使用 DeprecationWarning
和 PendingDeprecationWarning
通知 developers/tests(但不是最终用户)即将弃用以及 python foo.py -W
控件?
下面的代码片段是一个孤立的重现,它没有像我预期的那样工作,但我也不知道如何让 -W
工作。
test_deprecation.py
from warnings import warn
def warningfunction():
warn("this is deprecated", DeprecationWarning, 2)
def pendingfunction():
warn("pending", PendingDeprecationWarning, 2)
def test_warning():
warningfunction()
def test_pending():
pendingfunction()
if __name__ == '__main__':
warningfunction()
pendingfunction()
运行 与 pytest test_deprecation.py -vv
一样,这两个警告都符合预期。至少这个不错!
运行 as python test_deprecation.py
,只得到第一个警告(因为它在 main 中)。这也是我所期望的!
运行 as python test_deprecation.py -Wa
,仍然只得到第一个警告。这是我不期望的部分。 -Wa
不是应该打开所有警告吗?
运行 as python test_deprecation.py -Wi
(忽略警告),仍然只得到第一个警告。也不负众望。 -Wi
不是应该忽略所有警告吗?
-Wdefault # Warn once per call location
-Werror # Convert to exceptions
-Walways # Warn every time
-Wmodule # Warn once per calling module
-Wonce # Warn once per Python process
-Wignore # Never warn
The action names can be abbreviated as desired (e.g. -Wi, -Wd, -Wa, -We) and the interpreter will resolve them to the appropriate action name.
来自 https://docs.python.org/3/using/cmdline.html#cmdoption-w
(python3.8 顺便说一下)
echo $PYTHONWARNINGS
为空
您将 -Wa
和 -Wi
作为参数传递给脚本。您需要将它们放在脚本名称之前,以将它们视为解释器本身的选项。