Pytest 如何断言浮点数近似相等(assertAlmostEqual)?

浮点数断言用 pytest.approx:assert result == pytest.approx(3.14, rel=1e-3)。支持绝对/相对误差、列表与字典。不要用 == 直接比浮点数。本文给出用法与误差参数。

最佳实践
Pytest 如何断言浮点数近似相等(assertAlmostEqual)?封面

pytest.approxassert result == pytest.approx(3.14159, rel=1e-3)——浮点运算有精度误差,直接 == 比较几乎必然翻车。

基本用法

import pytest

def test_calculation():
    result = 0.1 + 0.2
    assert result == pytest.approx(0.3)          # 默认相对误差 1e-6

# 自定义误差
assert value == pytest.approx(3.14, rel=1e-2)  # 相对误差 1%
assert value == pytest.approx(3.14, abs=0.01)  # 绝对误差 0.01

容器也支持

assert [1.1, 2.2] == pytest.approx([1.1, 2.2])
assert {'pi': 3.14159} == pytest.approx({'pi': 3.14}, rel=1e-3)
import numpy as np
assert np.array([1.0, 2.0]) == pytest.approx(np.array([1.0, 2.0]))

unittest 传统写法

self.assertAlmostEqual(result, 3.14, places=2)   # 小数点后 2 位
self.assertAlmostEqual(result, 3.14, delta=0.01) # 或差值

常见问题(FAQ)

Q:approx 能断言不等吗? pytest 6.1+ 支持 assert x != pytest.approx(y)

Q:NaN 怎么处理? pytest.approx(float('nan'), nan_ok=True)

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台