Comparison with False - something I don't understand

Nobody nobody at nowhere.com
Thu Dec 2 04:58:18 EST 2010


On Thu, 02 Dec 2010 07:28:30 +0000, Harishankar wrote:

> When I run pychecker through my modules I get the message that 
> comparisons with "False" is not necessary and that it might yield 
> unexpected results.
> 
> Yet in some situations I need to specifically check whether False was 
> returned or None was returned. Why is comparison with False so bad?

The behaviour may be counterintuitive.

One might expect that "x == False" is equivalent to "not x". Sometimes it
is, sometimes it isn't.

E.g. 0 and 0.0 are equal to False and are equivalent to False when
converted to booleans:

	> 0 == False
	True
	> not 0
	True

	> 0.0 == False
	True
	> not 0.0
	True

[], "" and None aren't equal to False but are equivalent to False when
converted to booleans:

	> [] == False
	False
	> not []
	True

	> "" == False
	False
	> not ""
	True

	> None == False
	False
	> not None
	True

The boolean conversions are what's relevant for "if x ...", "while x ...",
etc.

If you want to test specifically for True, False or None, use "is" rather
than an equality check. This eliminates the warning and doesn't
risk misleading someone reading the code.




More information about the Python-list mailing list