How to validate the __init__ parameters

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Mon Dec 21 18:38:15 EST 2009


On Mon, 21 Dec 2009 21:49:11 +0000, r0g wrote:

> I use assertions myself e.g.
> 
>>>> foo = "123456"
>>>> assert len(foo) <= 5
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AssertionError
> 
> 
> Dunno if this would be considered good or bad programming practice by
> those more experienced than I (comment always welcome!) but it works for
> me :)


Bad practice.

Assertions are ignored when you run Python with the -O (optimization) 
command line switch. Your code will behave differently if you use 
assertions. So you should never use assertions for error-checking, except 
perhaps for quick-and-dirty throw-away scripts.

Assertions are useful for testing invariants and "this will never happen" 
conditions. A trivial example:

result = math.sin(2*math.pi*x)
assert -1 <= result <= 1

Assertions are also useful in testing, although be careful: since the 
assert statement is ignored when running with -O, that means you can't 
test your application when running with -O either! But do not use them 
for data validation unless you're happy to run your application with no 
validation at all.



-- 
Steven



More information about the Python-list mailing list