[Python-Dev] the role of assert in the standard library ?

Robert Kern robert.kern at gmail.com
Thu Apr 28 23:08:51 CEST 2011


On 4/28/11 3:27 PM, Holger Krekel wrote:
> On Thu, Apr 28, 2011 at 6:59 PM, Guido van Rossum<guido at python.org>  wrote:
>> On Thu, Apr 28, 2011 at 12:54 AM, Tarek Ziadé<ziade.tarek at gmail.com>  wrote:
>>> In my opinion assert should be avoided completely anywhere else than
>>> in the tests. If this is a wrong statement, please let me know why :)
>>
>> I would turn that around. The assert statement should not be used in
>> unit tests; unit tests should use self.assertXyzzy() always.
>
> FWIW this is only true for the unittest module/pkg policy for writing and
> organising tests. There are other popular test frameworks like nose and pytest
> which promote using plain asserts within writing unit tests and also allow to
> write tests in functions.  And judging from my tutorials and others places many
> people appreciate the ease of using asserts as compared to learning tons
> of new methods. YMMV.
>
> Holger
>
>> regular code, assert should be about detecting buggy code. It should
>> not be used to test for error conditions in input data. (Both these
>> can be summarized as "if you still want the test to happen with -O,
>> don't use assert.)

Regardless of whether those frameworks encourage it, it's still the wrong thing 
to do for the reason that Guido states. Some bugs only show up under -O, so you 
ought to be running your test suite under -O, too.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
  that is made terrible by our own mad attempt to interpret it as though it had
  an underlying truth."
   -- Umberto Eco



More information about the Python-Dev mailing list