Description
pytest.approx() with decimal.Decimal objects triggers a decimal.FloatOperation error when the ApproxDecimal object's repr method is called (e.g., during print() or assertion formatting).
This happens because ApproxDecimal.repr compares its Decimal tolerance with hardcoded float literals (like 1e-3, 1e3). When the decimal context traps FloatOperations (to maintain Decimal precision), these implicit float-Decimal comparisons raise an error.
This issue started with pytest version 8.4.0 and seems related to changes from Issue #13010.
Pytest 8.4.0
Python 3.13.2
Ubuntu 24.04 LTS
# test_decimal_approx.py
import decimal
import pytest
decimal.getcontext().traps[decimal.FloatOperation] = True
def test_decimal_approx_repr_issue():
"""Reproduces the decimal.FloatOperation error from pytest.approx(Decimal)'s repr."""
approx_obj = pytest.approx(decimal.Decimal("2.60"))
print(f"Attempting to represent pytest.approx(Decimal): {approx_obj}") # Triggers the bug
assert decimal.Decimal("2.600001") == approx_obj
# You can run this test with:
# python -m pytest test_decimal_approx.py
Metadata
Metadata
Assignees
Labels
No labels