pytest.approx fails with TypeError: unsupported operand type(s) for -: 'float' and 'NoneType' · Issue #10702 · pytest-dev/pytest (original) (raw)

When using approx to test float and one of the objects in the assert statement contain None I see the following TypeError:

TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'.

Minimal example

Test

import pytest


# Expecting assertion error with differing item
# Instead I see "TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'."
def test_pytest_none_approx():
    actual_result = {"a": 1.2}
    expected_result = {"a": None}
    approx_expected_result = pytest.approx(expected_result)
    assert approx_expected_result == actual_result

Output

E       AssertionError: assert approx({'a': 1.2 ± 1.2e-06}) == {'a': None}
E         (pytest_assertion plugin: representation of details failed: /Users/milanwiedemann/.pyenv/versions/3.10.4/lib/python3.10/site-packages/_pytest/python_api.py:270: TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'.
E          Probably an object has a faulty __repr__.)

pip list

Package        Version
-------------- -------
attrs          22.2.0
exceptiongroup 1.1.0
iniconfig      2.0.0
packaging      23.0
pip            22.0.4
pluggy         1.0.0
pytest         7.2.1
setuptools     58.1.0
tomli          2.0.1

Cersions of OS and pytest