ValueError 的 Python 断言

Posted

技术标签:

【中文标题】ValueError 的 Python 断言【英文标题】:Python Assertion for ValueError 【发布时间】:2021-08-23 10:51:21 【问题描述】:

有没有办法在纯 Python 中使用 assert 来测试 ValueError?

例如类似:

def try_me():
    raise ValueError("No way Jose")

assert try_me() is ValueError

【问题讨论】:

我很好奇您的预期用例是什么。您是否 - 例如 - 作为单元测试的一部分执行此操作,测试某些方法在以某种方式调用时会引发特定类型的错误?如果是这样,大多数测试框架都有使用框架执行此操作的方法(但具体方式取决于您使用的框架)。 【参考方案1】:

assert 仅计算 expressions

但你可以这样做:

def catch_exception(method):
    try:
        method()
    except Exception as e:
        return e.__class__


def try_me():
    raise ValueError("No way Jose")


assert catch_exception(try_me) is ValueError  # okay
assert catch_exception(try_me) is IndexError  # fails

【讨论】:

【参考方案2】:

您可以使用 unittest 模块中的unittest.TestCase.assertRaises。检查try_me 函数是否引发ValueError 如下所示:

import unittest


def try_me():
    raise ValueError("No way Jose")


class MyTestCase(unittest.TestCase):
    def test_if_throws_exception(self):
        self.assertRaises(ValueError, try_me)

【讨论】:

以上是关于ValueError 的 Python 断言的主要内容,如果未能解决你的问题,请参考以下文章

错误ValueError:尝试使用cross_val_score和线性回归时不支持连续[重复]

10.异常处理自定义异常断言

数字后带有减号的 CSV 文件。 “ValueError:无法将字符串转换为浮点数:”

ValueError:值都是 NaN?

Pandas 返回:ValueError: Unknown label type: 'continuous'

ValueError:未知标签类型:使用 cross_validation 时