Check string “None” or “not” in Python 2.7

For empty strings both are different:

foo = ''
if foo:
    print 'if foo is True'

will not print anything because it is empty and therefore considered False but:

if foo is not None: 
    print 'if not foo is None is True'

will print because foo is not None!

I Changed it according to PEP8. if foo is not None is equivalent to your if not foo is None but more readable and therefore recommended by PEP8.


A bit more about the general principles in Python:

if a is None:
    pass

The if will only be True if a = None was explicitly set.

On the other hand:

if a:
    pass

has several ways of evaluating when it is True:

  1. Python tries to call a.__bool__ and if this is implemented then the returned value is used.
    • So NoneFalse0.00 will evaluate to False because their __bool__ method returns False.
  2. If a.__bool__ is not implemented then it checks what a.__len__.__bool__ returns.
    • ''[]set()dict(), etc. will evaluate to False because their __len__ method returns 0. Which is False because bool(0) is False.
  3. If even a.__len__ is not implemented then if just returns True.
    • so every other objects/function/whatever is just True.

See also: truth-value-testing in thy python documentation.

Leave a Comment