[Python-Dev] Assertions

Tim Peters tim.one@home.com
Tue, 21 Nov 2000 20:34:32 -0500


[Tim, objects to abusing assertions]

[Paul Prescod]
> So you prefer
>
> if __debug__ and node.nodeType!=ELEMENT_TYPE:
>     raise TypeError

I personally prefer

if node.nodeType != ELEMENT_TYPE:
    raise TypeError

if that is in fact a correct test of whatever user-input precondition it is
you're verifying.  An assert would be appropriate if it were "impossible"
for the test to fail.

> Unfortunately there's no way to turn that off at "compile time" so you
> always incur the __debug__ lookup cost. That would send us back to two
> versions of the methods.

Actually, there is:

if __debug__:
    if node.nodeType != ELEMENT_TYPE:
        raise TypeError

Python produces no code for that block under -O (btw, this is the same
mechanism that makes asserts vanish under -O:  it's __debug__ that's magic,
not asserts).

As a user, though, I don't expect -O to turn off argument verification!
Same as the Python implementation in these respects:  public API functions
*always* check their arguments, while some private API functions check only
in Debug builds (and via the C library's assert() function, as it's a bug in
the implementation if a private API is misused).

do-s-right-thing-ly y'rs  - tim