Assertions are bad, m'kay?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Sat Mar 8 09:44:23 EST 2014


On Fri, 07 Mar 2014 16:15:36 -0800, Dan Stromberg wrote:

> On Fri, Mar 7, 2014 at 3:11 AM, Steven D'Aprano
> <steve+comp.lang.python at pearwood.info> wrote:
> 
> 
>> Assertions are not bad! They're just misunderstood and abused.
> 
>> You should read this guy's blog post on when to use assert:
>>
>> http://import-that.dreamwidth.org/676.html
> 
> Nice article.
> 
> BTW, what about:
> 
> if value >= 3:
>    raise AssertionError('value must be >= 3')
> 
> ?

The error message is misleading. But you've probably noticed that by 
now :-)

What about it? Since it's missing any context, it could be a good use of 
an exception or a terrible use. Where does value come from? Why is there 
a restriction on the value?

As I see it, there are likely two reasons for writing such a test:

1) You're testing a value that comes from the user, or some 
   library you don't control; or

2) You're testing some internal invariant, a contract between 
   two parts of your own code, a piece of internal logic, etc.


In the first case, I don't think you should raise AssertionError. A 
ValueError would be more appropriate.

In the second case, using an assert might be better, since that gives you 
the opportunity to remove it at compile-time, if you choose.




-- 
Steven D'Aprano
http://import-that.dreamwidth.org/



More information about the Python-list mailing list