Names changed to protect the guilty

Aahz aahz at
Sun Oct 8 05:19:10 CEST 2006

In article <877izb1vwe.fsf at>, John J. Lee <jjl at> wrote:
>aahz at (Aahz) writes:
>> The following line of lightly munged code was found in a publicly
>> available Python library...
>>     if schema.elements.has_key(key) is False:
>> Sorry, just had to vent.
>I think I was reading the same code recently (epydoc?) and was also
>momentarily horrified ;-) until I realized that it was quite
>deliberately using three-valued logic (True, False, None) for some
>presumably-sensible reason.  Since None is false, they had to use
>"is".  So, given the need for three-valued logic, it's not as silly as
>it looks.

My take is that even in that case, one should use "is" only with None.
There is too much ground for bugs with True/False, particularly if you
either intend to work across version *or* you might possibly accept a
user's object (because *they* might be working across versions and
therefore returning 1/0 instead of True/False).  I think it's safest to
simply ban this idiom.  No exceptions, never.

And, no, this wasn't epydoc.
Aahz (aahz at           <*>

"If you don't know what your program is supposed to do, you'd better not
start writing it."  --Dijkstra

More information about the Python-list mailing list