handle comparison results which raise when asked for their truth value
This commit is contained in:
		
							parent
							
								
									f5decc90ca
								
							
						
					
					
						commit
						0bb84abca7
					
				|  | @ -25,7 +25,11 @@ def _format_boolop(operands, explanations, is_or): | ||||||
| 
 | 
 | ||||||
| def _call_reprcompare(ops, results, expls, each_obj): | def _call_reprcompare(ops, results, expls, each_obj): | ||||||
|     for i, res, expl in zip(range(len(ops)), results, expls): |     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 |             break | ||||||
|     if py.code._reprcompare is not None: |     if py.code._reprcompare is not None: | ||||||
|         custom = py.code._reprcompare(ops[i], each_obj[i], each_obj[i + 1]) |         custom = py.code._reprcompare(ops[i], each_obj[i], each_obj[i + 1]) | ||||||
|  |  | ||||||
|  | @ -239,3 +239,17 @@ class TestAssertionRewrite: | ||||||
|         def f(): |         def f(): | ||||||
|             assert 1 < 3 < 5 <= 4 < 7 |             assert 1 < 3 < 5 <= 4 < 7 | ||||||
|         assert getmsg(f) == "assert 5 <= 4" |         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) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue