微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python-在pytest中捕获异常后如何打印消息

假定此示例代码

def test_foo():
    dict = load_dict()
    try:
        value = dict[foo][bar]
    except KeyError:
        print('missing foo or bar')

如果由于foo或bar不存在而引发KeyError,则测试不会失败,因为捕获了异常.如果我添加一个SystemExit(1),它将失败,打印消息并显示所有回溯.

我的问题是,我如何告诉pytest如果发生KeyError,则意味着测试失败,因此我不需要引发SystemExit?

解决方法:

一个功能pytest.fail明确使测试失败:

import pytest

def test_foo():
    d1 = {'foo': 'bar'}
    try:
        value = d1['baz']
    except KeyError as err:
        pytest.fail('this was unexpected: {}'.format(err))

但是,惯用的方式是使用pytest.raises上下文管理器来验证是否引发了异常,并使用一些方便的实用程序将其捕获以进行分析:

import pytest

def test_foo():
    d1 = {'foo': 'bar'}
    with pytest.raises(KeyError) as excinfo:
        value = d1['baz']
    assert excinfo.type == KeyError
    assert excinfo.match('baz')

查看文档以获取更多示例.如果您熟悉unittest,则pytest.raises是unittest.TestCase.assertRaises的项,而pytest.fail是unittest.TestCase.fail的项.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐