Python style guidelines

Peter Otten __peter__ at web.de
Thu Mar 11 06:18:01 EST 2004


Josef Meile wrote:

>> Is there something missing you think should be there?  There's no
>> particular
>> reason a PEP needs to be continually updated.  In particular, notions of
>> good Python style haven't changed a lot over the past ten years.
>> 
>> Skip
> I agree, those are good guidelines, but I don't agree with:
> 
> - Don't compare boolean values to True or False using == (bool
>    types are new in Python 2.3):
> 
>          No:  if greeting == True:
>          Yes: if greeting:
> 
> What would happened if you do:
> 
>  >>> a='test'
>  >>> if a.find('foo'):
> ...    print "foo was found"
> ...
> foo was found
> 
> I think you should never do a direct boolean comparison. Instead
> one should use a more elaborate boolean expresion like:
> 
>  >>> a='test'
>  >>> if a.find('foo') >= 0:
> ...    print "foo was found"
> ...
> 
> 
> You will have problems specially if you come from languages where
> values minor than zero are considered to be false. I think the
> previous sintax is ambiguous.

I think your find() example has nothing to do with 

if boolVal == True:

versus

if boolVal:

though it might be a pitfall for people coming from languages with 1-based
indices. If you discard the index it returns anyway, you could use the
clearer

if "foo" in a:

instead.

As to the original issue, I disagree with you and prefer the recommended
style. I find it natural even for non-booleans:

greeting = "Hi"
if greeting:
    print greeting

If you expect a boolean value and fear that you may erroneously encounter
something else, the value == True test will not be sufficient anyway,
because treating, say, "Hi" as False may be an error, too. It's

if greeting == True:
   ...
elif greeting == False:
   pass
else:
   raise AssertionError, "greeting must be True or False"

versus

assert greeting in (True, False), "greeting must be True or False"
if greeting:
   ...

then, and again the last wins at in my eyes.

Peter




More information about the Python-list mailing list