In Python how should I test if a variable is None, True or False
Categories:
Python: How to Test for None, True, or False

Master the correct and Pythonic ways to check for None
, True
, and False
values in your Python code, avoiding common pitfalls and ensuring robust logic.
In Python, None
, True
, and False
are special singleton objects representing the absence of a value, logical truth, and logical falsehood, respectively. Correctly testing for these values is crucial for writing reliable and readable code. This article will guide you through the recommended practices, explain why certain approaches are preferred, and highlight common mistakes to avoid.
Testing for None
The None
object is a unique constant used to signify the absence of a value or a null operation. It is the sole instance of the NoneType
data type. When checking if a variable is None
, it's essential to use the identity operator is
rather than the equality operator ==
.
my_variable = None
# Correct way to test for None
if my_variable is None:
print("my_variable is None")
# Incorrect (but often works) way to test for None
# This can have unexpected side effects with custom objects that override __eq__
if my_variable == None:
print("my_variable is None (using ==)")
# Testing for not None
if my_variable is not None:
print("my_variable is not None")
Demonstrating the correct way to test for None
using is
.
is None
and is not None
when checking for the None
singleton. This is Python's idiomatic way and ensures you're checking for identity, not just equality, which can be overridden for custom objects.Testing for True
and False
The True
and False
objects are the only instances of the bool
data type. While you can use is True
and is False
, it's generally more Pythonic and often clearer to rely on the truthiness of an expression directly. Python's if
statements implicitly evaluate the truthiness of an object.
is_active = True
is_empty = False
# Pythonic way to test for True
if is_active:
print("is_active is True")
# Pythonic way to test for False
if not is_empty:
print("is_empty is False")
# Explicit (but less Pythonic) way to test for True
if is_active is True:
print("is_active is True (explicit)")
# Explicit (but less Pythonic) way to test for False
if is_empty is False:
print("is_empty is False (explicit)")
Comparing Pythonic and explicit ways to test for True
and False
.
if variable == True:
or if variable == False:
. This is redundant and can lead to subtle bugs if variable
is an object that evaluates to True
or False
but is not strictly the True
or False
singleton (e.g., if 1 == True:
evaluates to True
, but 1 is True:
evaluates to False
).Understanding Truthiness and Falsiness
In Python, many objects are considered 'truthy' or 'falsy' in a boolean context (like an if
statement), even if they are not explicitly True
or False
. Understanding this concept is key to writing concise and effective conditional logic.
flowchart TD A[Python Object] --> B{Boolean Context?} B -->|Yes| C{Is it Falsy?} C -->|Yes| D[Evaluates to False] C -->|No| E[Evaluates to True] B -->|No| F[No Boolean Evaluation]
Flowchart illustrating Python's truthiness evaluation.
The following values are considered 'falsy' in Python:
None
False
- Numeric zero of all types (e.g.,
0
,0.0
,0j
) - Empty sequences (e.g.,
''
,()
,[]
) - Empty mappings (e.g.,
{}
) - Empty sets (e.g.,
set()
)
All other values are generally considered 'truthy'.
# Examples of falsy values
if not None: print("None is falsy")
if not False: print("False is falsy")
if not 0: print("0 is falsy")
if not 0.0: print("0.0 is falsy")
if not '': print("Empty string is falsy")
if not []: print("Empty list is falsy")
if not {}: print("Empty dict is falsy")
# Examples of truthy values
if True: print("True is truthy")
if 1: print("1 is truthy")
if "hello": print("Non-empty string is truthy")
if [1, 2]: print("Non-empty list is truthy")
Demonstrating truthy and falsy values in Python.