check for user-generated exceptions

This commit is contained in:
Reagan Lee 2023-08-10 17:37:48 -07:00
parent 47c0fc3d78
commit e938580257
1 changed files with 22 additions and 9 deletions

View File

@ -132,8 +132,14 @@ def isiterable(obj: Any) -> bool:
try: try:
iter(obj) iter(obj)
return not istext(obj) return not istext(obj)
except TypeError: except Exception as e:
return False if (
isinstance(e, TypeError)
and (len(e.args) == 1)
and "iter() returned non-iterator of type" in str(e.args[0])
):
return False
raise ValueError(f"Unexpected exception {e!r} while testing object {obj!r}")
def has_default_eq( def has_default_eq(
@ -195,13 +201,20 @@ def assertrepr_compare(
explanation = _notin_text(left, right, verbose) explanation = _notin_text(left, right, verbose)
except outcomes.Exit: except outcomes.Exit:
raise raise
except Exception: except Exception as e:
explanation = [ if (
"(pytest_assertion plugin: representation of details failed: {}.".format( isinstance(e, ValueError)
_pytest._code.ExceptionInfo.from_current()._getreprcrash() and (len(e.args) == 1)
), and ("Unexpected exception" in str(e.args[0]))
" Probably an object has a faulty __repr__.)", ):
] 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__.)",
]
if not explanation: if not explanation:
return None return None