Howdy!
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.
Comparisons against False -are- dangerous, demonstrated below.
Yet in some situations I need to specifically check whether False was
returned or None was returned. Why is comparison with False so bad?
(False == 0) is True
(True == 1) is True
The bool type is a subclass of int! (Run those lines in a Python
interpreter to see. ;)
if var == False:
if var is False: …
So how do you get around this? My functions return False and None under
different circumstances. Should I raise exceptions instead? I feel it's
unnecessary clutter to use exceptions unless absolutely no other
solution is available and yet I have doubts about the "False" value.
If you want to check not just for value equivelance (False == 0) but
literal type, use the "is" comparator. "is" checks, and others correct
me if I'm wrong, the literal memory address of an object against
another. E.g. False, being a singleton, will always have the same
memory address. (This is true of CPython, possibly not of Python
implementations like Jython or IronPython.) Using "is" will be
effective for checking for literal None as well.
When ever I need to test for None, I always use the "is" comparator.
It's also more English-like. (None, evaluating to False when using
'==', is useful when all you care about is having a blank default
value, for example.)
— Alice.
--
http://mail.python.org/mailman/listinfo/python-list