- 
          
- 
                Notifications
    You must be signed in to change notification settings 
- Fork 2.9k
Description
Hello,
While working on #12444, I used pytest.approx to compare two dictionaries with different keys.
The error message is pretty confusing. Instead of telling me that the keys don't match, I get an AssertionError with a representation issue and a KeyError for the missing key.
What I expected: A clearer message saying the dictionaries have different keys, something like: "comparison failed. dictionary has different keys: expected (a, c), got (a, b)".
What I got instead:
AssertionError: assert approx({'a': ... 4 ± 4.0e-06}) == {'a': 1, 'c': 3}
(pytest_assertion plugin: representation of details failed: /home/cmnemoi/code/repro_bugs/.venv/lib/python3.13/site-packages/_pytest/python_api.py:271: KeyError: 'b'.
 Probably an object has a faulty __repr__.)
How to reproduce
import pytest
def test_approx_dicts_with_mismatch_on_keys() -> None:
    expected = {"a": 1, "c": 3}
    actual = {"a": 1, "b": 4}
    assert pytest.approx(actual) == expectedEnvironment
- pytest version: 8.4.2
- Operating System: Pop_OS! 22.04 (GNU/Linux)
Installed Packages
Package                 Version   Editable project location
----------------------- --------- -----------------------------
annotated-types         0.7.0
certifi                 2025.10.5
charset-normalizer      3.4.4
click                   8.1.8
click-option-group      0.5.9
coverage                7.10.7
Deprecated              1.2.18
dotty-dict              1.3.1
filelock                3.20.0
gitdb                   4.0.12
GitPython               3.1.45
idna                    3.11
importlib_resources     6.5.2
iniconfig               2.1.0
Jinja2                  3.1.6
markdown-it-py          4.0.0
MarkupSafe              3.0.3
mdurl                   0.1.2
mypy                    1.18.2
mypy_extensions         1.1.0
packaging               25.0
pathspec                0.12.1
pip                     25.2
pluggy                  1.6.0
pydantic                2.12.2
pydantic_core           2.41.4
Pygments                2.19.2
pytest                  8.4.2
pytest-cov              7.0.0
pytest-mypy             1.0.1
pytest-watcher          0.4.3
python-gitlab           6.4.0
python-semantic-release 10.4.1
requests                2.32.5
requests-toolbelt       1.0.1
rich                    14.2.0
ruff                    0.14.0
shellingham             1.5.4
smmap                   5.0.2
tomlkit                 0.13.3
typing_extensions       4.15.0
typing-inspection       0.4.2
urllib3                 2.5.0
watchdog                6.0.0
wrapt                   1.17.3
Metadata
Metadata
Assignees
Labels
No labels