[Python-ideas] Programming recommendations (PEP 8) and boolean values

Steven D'Aprano steve at pearwood.info
Sun Aug 12 15:14:33 CEST 2012


On 11/08/12 13:47, Mike Meyer wrote:
> Am I the only one that noticed this?
>
> PEP 8 says: "Don't compare boolean values to True or False using ==."
>
> To me, all the talk about wanting to test variables that might not
> hold True of False (i.e. - True/False/None or True/False/String or
> ...) are off topic, as those values *aren't* boolean values. So this
> bit of the PEP doesn't really apply to those cases.

That's debatable. If I have an object which could be True/False/Other,
or even many different Others, once I've eliminated the Other case(s),
I'm left with a binary choice between two bools. Hence PEP 8 apparently
applies even when dealing with tri-state logic values.


>  Some of the
> responses have touched on this by saying you should check that the
> values are/aren't boolean before testing them, which would mean the
> above would apply to the tests on the boolean branch.

Exactly.


> But the
> arguments are all couched in terms of better style, as opposed whether
> or not the this rule in the PEP actually applies.

I don't understand. The rule is a style rule, and programming style is
intended to result in better code. So what's your point?


> Am I wrong here?  Has my exposure to Hindley-Milner type systems
> tainted me to the point where I just don't get it any more?

I don't anything about Hindley-Milner, but I do know that duck-typing
means that any object can quack like a bool.

I also know that even in languages with strict True/False bools, like
Pascal, writing "if flag == True" is a common rookie mistake.

In both cases, a recommendation to avoid both "flag == True" and
"flag is True" is good advice. PEP 8 already gives us permission to
break the rules when necessary. What else do we need?


-- 
Steven



More information about the Python-ideas mailing list