Hi Philippe, Neil, On Fri, Apr 24, 2009 at 14:45 +0200, Philippe Fremy wrote: > Neil Shepperd wrote: > > Hi, > > > >> I have found that storing the results of the call I want to test the > >> result of, and then asserting the result generally eliminates these > >> errors. > >> > >> For example: > >> > >> assert Foo() == 23 > >> > >> often caused me problems with that message, however: > >> > >> foo = Foo() > >> assert foo == 23 > >> > >> would not. > >> > >> I am not sure why that is the case but I was able to resolve the issue > >> using the second form. > > If I understand it correctly, the test handling magic evaluates each > > part of the expression again, to display it in the fail traceback. > > For example, in the traceback of some test it will say: > > > > def test_xxx(): > > E assert Foo() == 23 > >> assert 0 == 23 > > > > If Foo() returns 0. It is run again get the value 0 to substitute into > > the error message. However if the second time it is run Foo() actually > > works correctly and returns 23, this value is obviously not correct, > > because if it were the assert would have passed. > > > > I suspect maybe py.test is evaluating t.isAlive() again to substitute > > into the if-expression, resulting in confusion when the result changes > > to True. If that is the case, you might have to do something like > > > > checker.stop( False ) > > is_alive = t.isAlive() > > is_finished = checker.isFinished() > > if not is_alive: assert False > > if is_finished: assert False > > > > > > Hope this made sense, > > Thanks, it makes sense now on the cause of the error. This ought to be > documented somewhere in py.test
i agree, the error message is slightly mysterious. what about this: def test_inconsistent(): def f(l=[1,0]): return l.pop() > assert f() E AssertionError: (assert failed but re-evaluating the assert expression for printing intermediate values lead to a True value. advise: avoid side-effects in assert expressions or use --nomagic) It's a bit longish but i doubt people encountering the problem would know where to lookup things in the documentation. Any other suggestion for the error message? cheers, holger > cheers, > > Philippe > > _______________________________________________ > py-dev mailing list > py-dev@codespeak.net > http://codespeak.net/mailman/listinfo/py-dev > -- Metaprogramming, Python, Testing: http://tetamap.wordpress.com Python, PyPy, pytest contracting: http://merlinux.eu _______________________________________________ py-dev mailing list py-dev@codespeak.net http://codespeak.net/mailman/listinfo/py-dev