[Tutor] Another assert() question

Dick Moores rdm at rcblue.com
Sat Jul 12 23:43:20 CEST 2008


At 01:24 PM 7/12/2008, Danny Yoo wrote:
>Content-Transfer-Encoding: 7bit
>Content-Disposition: inline
>
> > In my code I have
> >
> > assert(len(list(set(colors_used_this_cycle))) ==
> > len(colors_used_this_cycle), "A color has been used twice!")
> >
> > But it doesn't work. Cases where a color has been used more than once go
> > right through it
>
>
>Let's try a simple example.
>
>
>Go back to the structure of an assert statement.
>
>     assert condition[, expression]   ## template
>
>Let's think of a very simple condition.  How about False?  Let's
>replace the "condition" part above with False, and not provide an
>expression yet.
>
> >>> assert False
>Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>AssertionError
>
>
>Ok, good.  Now let's try to also fill in an expression.  Let's have
>the expression be "I expected this".  So we look back at our template:
>
>     assert condition[, expression]   ## template
>
>We're going to substitute False as our condition, and "I expected
>this" as our expression.
>
>
> >>> assert False, "I expected this."
>Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>AssertionError: I expected this.
>
>
>That also seems to work.
>
>If the expression gets a little more complicated, the form of the
>assertion statement still stays the same.  Let's say that we're
>checking to see that the square root of -1 is 1j.  The condition we're
>checking is:
>
>     (cmath.sqrt(-1) == 1j)
>
>and the expression is "Bad math."  Then:
>
> >>> import cmath
> >>> assert (cmath.sqrt(-1) == 1j), "Bad math"
> >>>
>
>We didn't see anything, so the assertion's condition is true.  Let's
>artificially induce it to fail.
>
>
> >>> assert (cmath.sqrt(1) == 1j), "Bad math"
>Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
>AssertionError: Bad math
>
>
>Can you go through a similar exercise with your own condition and
>expression?  Isolate the condition part of what you want to test, the
>expression part that you want to show, and then just plug directly
>into the assert template.

You can see my solution at 
<http://py77.python.pastebin.com/f342197d>, the highlighted line, line 117.

>(The problem here is that you've run across one of the edge cases in
>Python's syntax involving parenthesized expressions.  Anyone who says
>that you can disregard parentheses in Python is not telling the
>truth.)

Thanks for all all those easy steps, Danny. Very clear.

Dick




More information about the Tutor mailing list