Clarity vs. code reuse/generality

Steven D'Aprano steve at
Sun Jul 5 03:27:30 CEST 2009

On Sat, 04 Jul 2009 21:14:45 +0000, kj wrote:

>>Technically these are known as "invariants". An assertion will always be
>>True if the program is bug-free, no matter what the user might throw at
>>it; it's not the same as validation.
> What *user* are you talking about???  I've stated a bazillion times that
> this function is meant to be called only from within this module.

In that case, you would be the user, and like any user, you might 
accidentally call the function with invalid data.

I believe this discussion started because you are presenting this as code 
for novices. In that case, it is absolutely important that you start off 
by teaching them the Right Way to do things. As a general rule, the Right 
Way is to do an explicit test and raise rather than use assert.

In production code, "internal use only" code is a grey area where assert 
is sometimes justified (although I'll point out that in practice, code 
written for internal use only has a habit of being called by others). But 
you're not writing production code, you're writing *teaching code*, where 
even more important than code correctness is user education.


More information about the Python-list mailing list