Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check string "None" or "not" in Python 2.7

Wondering if if not foo is None is the same as if foo? Using Python 2.7 and foo is a string.

like image 255
Lin Ma Avatar asked Mar 12 '16 00:03

Lin Ma


People also ask

How do I check if a string is empty or None in Python?

Use len to Check if a String in Empty in Python # Using len() To Check if a String is Empty string = '' if len(string) == 0: print("Empty string!") else: print("Not empty string!") # Returns # Empty string! Keep in mind that this only checks if a string is truly empty.

How do you check if a string is None or not?

Using len() is the most generic method to check for zero-length string. Even though it ignores the fact that a string with just spaces also should be practically considered as empty string even its non zero.

How check value is None or not in Python?

Method #1 : Using all() + not operator + values() The not operator is used to inverse the result to check for any of None value.

Is None string in Python?

The None keyword is used to define a null value, or no value at all. None is not the same as 0, False, or an empty string. None is a data type of its own (NoneType) and only None can be None.


2 Answers

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 None, False, 0.0, 0 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.

like image 81
MSeifert Avatar answered Sep 28 '22 11:09

MSeifert


No, not the same when foo is an empty string.

In [1]: foo = ''

In [2]: if foo:
   ...:     print 1
   ...:

In [3]: if foo is None:
   ...:     print 2
   ...:

In [4]: if not foo is None:
   ...:     print 3
   ...:
3
like image 37
tianwei Avatar answered Sep 28 '22 09:09

tianwei