handle comparison results which raise when asked for their truth value

This commit is contained in:
Benjamin Peterson 2011-05-24 18:15:08 -05:00
parent f5decc90ca
commit 0bb84abca7
2 changed files with 19 additions and 1 deletions

View File

@ -25,7 +25,11 @@ def _format_boolop(operands, explanations, is_or):
def _call_reprcompare(ops, results, expls, each_obj):
for i, res, expl in zip(range(len(ops)), results, expls):
if not res:
try:
done = not res
except Exception:
done = True
if done:
break
if py.code._reprcompare is not None:
custom = py.code._reprcompare(ops[i], each_obj[i], each_obj[i + 1])

View File

@ -239,3 +239,17 @@ class TestAssertionRewrite:
def f():
assert 1 < 3 < 5 <= 4 < 7
assert getmsg(f) == "assert 5 <= 4"
def test_assert_raising_nonzero_in_comparison(self):
def f():
class A(object):
def __nonzero__(self):
raise ValueError(42)
def __lt__(self, other):
return A()
def __repr__(self):
return "<MY42 object>"
def myany(x):
return False
assert myany(A() < 0)
assert "<MY42 object> < 0" in getmsg(f)