How to validate the __init__ parameters
r0g
aioe.org at technicalbloke.com
Mon Dec 21 19:18:21 EST 2009
Steven D'Aprano wrote:
> 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.
>
>
>
Yikes, glad to be set me straight on that one! Thanks :) It's a pity
though, I really like the way it reads. Is there anything similar with
ISN'T disabled when optimizations are turned on?
I guess I could do the following but it seems a bit ugly in comparison :(
if len(foo) <= 5: raise Exception
Roger.
More information about the Python-list
mailing list