python - unittest - 如何断言两个可能的 NaN 值是否相等

标签 python nan equality python-unittest

在我的测试用例中,我假设如果两个值是 NaN 那么它们是相等的。使用 unittest 断言表达它的方式是什么?下面介绍的两个常用函数不处理这种情况。

v1 = np.nan
v2 = np.nan
self.assertEquals(v1, v2)
self.assertTrue(v1 == v2)

目前对我有效的解决方案是在 assertTrue 中使用 bool 表达式:

self.assertTrue(v1 == v2 or (np.isnan(v1) and np.isnan(v2))

最佳答案

你可以使用:

numpy.testing.assert_equal(v1, v2)

来自 docs :

This function handles NaN comparisons as if NaN was a “normal” number. That is, no assertion is raised if both objects have NaNs in the same positions. This is in contrast to the IEEE standard on NaNs, which says that NaN compared to anything must return False.

当值不相等时它会抛出 AssertionError,它应该可以很好地与 pytest 一起工作,但它可能不适合单元测试。

另一种选择是:

numpy.isclose(v1, v2, equal_nan=True)

但显然它是 math.isclose 的替代品,而不是 ==

关于python - unittest - 如何断言两个可能的 NaN 值是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51728427/

相关文章:

python:自动区分list/tuple/array和int/float

java - 如何在 Java 中比较字符串?

rust - 断言特征对象的相等性?

python 2 打印带有浮点格式且没有行返回的数组

python - 如何在 jinja2 中获取 WTForms 验证器

Python Pandas - 使用 interpolate() 将一列的 NaN 值替换为另一列

python - pandas argsort 如何将 nan 保留为 nan?

ios - 核心数据。检测相同的对象?

python - 如果索引值相同,如何将一个 DataFrame 列复制到另一个 DataFrame

Postgresql - 求和时如何将 NaN 视为 0?