On Aug 1, 12:35 pm, "Chris Mellon" <[EMAIL PROTECTED]> wrote: > On 8/1/07, beginner <[EMAIL PROTECTED]> wrote: > > > > > > > On Aug 1, 11:28 am, "Chris Mellon" <[EMAIL PROTECTED]> wrote: > > > On 8/1/07, beginner <[EMAIL PROTECTED]> wrote: > > > > > Hi, > > > > > Does anyone know how to put an assertion in list comprehension? I have > > > > the following list comprehension, but I want to use an assertion to > > > > check the contents of rec_stdl. I ended up using another loop which > > > > essentially duplicates the functions of list comprehension. It just > > > > look like a waste of coding and computer time to me. > > > > > I just wish I could put the assertions into list comprehensions. > > > > > x=[(rec_stdl[0].st/10000.0, > > > > rec_stdl[0].cl, > > > > rec_stdl[0].bb, > > > > rec_stdl[0].bo, > > > > rec_stdl[1].bb, > > > > rec_stdl[1].bo, > > > > rec_stdl[0].ex > > > > ) > > > > for rec_stdl in rec_by_ex if len(rec_stdl)==2 > > > > ] > > > > > #duplicated loop > > > > if __debug__: > > > > for rec_stdl in rec_by_ex: > > > > l=len(rec_stdl) > > > > assert(l<=2 and l>0) > > > > if l==2: > > > > assert(rec_stdl[0].c=="C" and rec_stdl[1].c=="P") > > > > assert(rec_stdl[0].ex==rec_stdl[1].ex) > > > > assert(rec_stdl[0].st==rec_stdl[1].st) > > > > assert(rec_stdl[0].cp==rec_stdl[1].cp) > > > > First: All your asserts are wrong. Assert is a statement, not a > > > function. These specific ones will behave as expected, but it's easy > > > to accidentally write ones that always pass this way. > > > Do you mean I should not use the parentheses? > > Yes. > > > > > > Secondly: This is a waste of code, because if __debug__ is not defined > > > asserts will be skipped by the compiler. You could use the same loop > > > block for both branches. > > > I know. My original question was how. Dan suggested to write a checker > > function. > > Use the second block in all cases. In any situation where "if > __debug__" is False, the asserts are a noop and in fact won't even be > present in the bytecode. > > > > > > > > Thirdly: This sort of testing is precisely what unit tests and/or > > > doctests are for. > > > Agreed. > > > -- > >http://mail.python.org/mailman/listinfo/python-list- Hide quoted text - > > - Show quoted text -- Hide quoted text - > > - Show quoted text -
I see. In fact I want to whole block surrounded by __debug__ to be optimized away in non-debug runs. If the logic of my program is correct, the asserts are guaranteed to be true, no matter what the input is. It is not input checking. -- http://mail.python.org/mailman/listinfo/python-list