gpt4 book ai didi

python - @pytest.mark.filterwarnings 如何工作?

转载 作者:行者123 更新时间:2023-12-01 23:49:00 25 4
gpt4 key购买 nike

根据the docs您可以忽略这样的警告:

@pytest.mark.filterwarnings("ignore:api v1")
def test_foo():

给出:

但是似乎没有任何关于这种迷你语言的文档(它甚至是一种迷你语言吗?)

比赛如何进行?

我问这个问题是因为以下测试不会忽略导入 boto3 引发的 DeprecationWarning:

@pytest.mark.filterwarnings("ignore:DeprecationWarning")
def test_ignore_warnings():
import boto3

Pytest 输出:

============================================================================================================================== warnings summary ===============================================================================================================================
/home/rob/dev/time-series/.venv/lib/python3.7/site-packages/botocore/awsrequest.py:624
/home/rob/dev/time-series/.venv/lib/python3.7/site-packages/botocore/awsrequest.py:624: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working
class HeadersDict(collections.MutableMapping):

-- Docs: https://docs.pytest.org/en/latest/warnings.html
==================================================================================================================== 1 passed, 1 warnings in 0.36 seconds =====================================================================================================================

最佳答案

过滤器的工作方式与将 -W 参数与 python 命令一起使用时的工作方式相同(请参阅python --help)。 warnings 的文档中描述了该格式。模块。简而言之,它是 action:message:category:module:line ,其中 action 可能是强制性的,但其他部分可以省略。

"ignore:api v1" 将尝试通过定义“包含警告消息开头必须匹配的正则表达式的字符串来匹配消息。由于您实际上想要匹配category,因此您可以跳过message。这意味着您似乎在 ignore 之后缺少一个冒号,因此这是正确的格式:

@pytest.mark.filterwarnings("ignore::DeprecationWarning")
def test_ignore_warnings():
import boto3

但是,如果在测试函数之外导入包期间发生这种情况,您显然仍然会收到警告。在这种情况下,您可能需要全局指定过滤器作为 pytest 的参数:

pytest -W "ignore::DeprecationWarning"./tests/

...或将其添加到pytest.ini:

[pytest]
filterwarnings =
ignore::DeprecationWarning

如果不需要这样的全局排除,您可以尝试将其限制到特定模块:

忽略::DeprecationWarning:boto3

测试

出于测试目的,您可以使用以下代码:

import warnings

def something():
warnings.warn("Test", DeprecationWarning)

@pytest.mark.filterwarnings("ignore::DeprecationWarning")
def test_ignore_warnings():
something()

关于python - @pytest.mark.filterwarnings 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58645563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com