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

Reply via email to