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

Reply via email to