What is the correct way to check for False? [duplicate]

I would write if not somevalue: although for non boolean types it will behave differently: if not "": will run the code but if "" == False: will not.

Commented May 8, 2016 at 19:08

You generally don't explicitly compare objects to False / True in Python. Just do if somevalue: or if not somevalue:

Commented May 8, 2016 at 19:08

2 Answers 2

It rather depends on what somevalue can be: if somevalue could be anything you could check that it's a boolean and not :

if isinstance(somevalue, bool) and not somevalue 

this doesn't rely on False being a singleton. If it always is a singleton you can also do:

if somevalue is False 

But PEP8 of Python states you shouldn't care if it about the class and just use:

if not somevalue 

this will evaluate if somevalue is "falsy". See Python documentation on Truth value testing.

Don't compare boolean values to True or False using == .

and gives these examples:

Yes: if greeting: No: if greeting == True: Worse: if greeting is True: 

which translates in your case to:

Yes: if not greeting: No: if greeting == False: Worse: if greeting is False: 

Keep in mind that each string is considered "truthy" except the empty string '' .

answered May 8, 2016 at 20:03 151k 41 41 gold badges 344 344 silver badges 365 365 bronze badges

is is checking whether two objects are literally the same object. == is checking for equality.

If you want to check whether something is false, e.g. zero, opposite of True , do if something == False .

As mentioned in the comments, you can certainly do if not something , it may improve readability quite a bit, but it's the same as if bool(something) == False .

I prefer equality, because, to my mind, True and False should behave just like 1 and 0 in terms of being true or false. For example ("a" == "a") == False evaluates to False just like ("a" == "a") == 0 does.