diff --git a/changelog/7966.bugfix.rst b/changelog/7966.bugfix.rst deleted file mode 100644 index 40cad46c6..000000000 --- a/changelog/7966.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -Assertion rewrite mechanism now gives a seperate, more detailed error message from failures within __iter__. diff --git a/src/_pytest/assertion/util.py b/src/_pytest/assertion/util.py index d20c2363e..fc5dfdbd5 100644 --- a/src/_pytest/assertion/util.py +++ b/src/_pytest/assertion/util.py @@ -134,13 +134,6 @@ def isiterable(obj: Any) -> bool: return not istext(obj) except TypeError: return False - except Exception as e: - raise ValueError( - [ - f"pytest_assertion plugin: unexpected exception {e!r} while testing object {obj!r}", - ", probably from __iter__", - ] - ) def has_default_eq( @@ -202,20 +195,13 @@ def assertrepr_compare( explanation = _notin_text(left, right, verbose) except outcomes.Exit: raise - except Exception as e: - if ( - isinstance(e, ValueError) - and (len(e.args) == 1) - and ("__iter__" in str(e.args[0])) - ): - explanation = e.args[0] - else: - explanation = [ - "(pytest_assertion plugin: representation of details failed: {}.".format( - _pytest._code.ExceptionInfo.from_current()._getreprcrash() - ), - " Probably an object has a faulty __repr__.)", - ] + except Exception: + explanation = [ + "(pytest_assertion plugin: representation of details failed: {}.".format( + _pytest._code.ExceptionInfo.from_current()._getreprcrash() + ), + " Probably an object has a faulty __repr__.)", + ] if not explanation: return None diff --git a/testing/test_assertrewrite.py b/testing/test_assertrewrite.py index 62c6bb8d4..d85c8bed6 100644 --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -689,7 +689,7 @@ class TestAssertionRewrite: def f() -> None: class A: def __iter__(self): - raise ValueError() + raise TypeError("user message") def __eq__(self, o: object) -> bool: return self is o @@ -698,7 +698,7 @@ class TestAssertionRewrite: msg = getmsg(f) assert msg is not None - assert "__iter__" in msg and "__repr__" not in msg + assert "Unexpected exception" in msg def test_formatchar(self) -> None: def f() -> None: