To check if a variable exists in Python, you can use several methods depending on the scope (global, local, or object attributes) and whether you want to handle exceptions explicitly. Here’s a detailed guide with examples:
1. Check for Global or Local Variables
Use the globals()
or locals()
dictionaries to check if a variable name exists in the current scope.
Example 1: Check Global Variables
x = 10 # Global variable
if 'x' in globals():
print("Global variable 'x' exists.")
else:
print("Global variable 'x' does NOT exist.")
# Output: Global variable 'x' exists.
Example 2: Check Local Variables
def my_function():
y = 20 # Local variable
if 'y' in locals():
print("Local variable 'y' exists.")
else:
print("Local variable 'y' does NOT exist.")
my_function() # Output: Local variable 'y' exists.
2. Check Object Attributes
Use hasattr()
to check if an object (e.g., a class instance) has a specific attribute.
Example 3: Check Class/Instance Attributes
class MyClass:
class_var = 30 # Class-level variable
def __init__(self):
self.instance_var = 40 # Instance-level variable
# Check class attribute
if hasattr(MyClass, 'class_var'):
print("Class attribute 'class_var' exists.") # Output: Exists
# Check instance attribute
obj = MyClass()
if hasattr(obj, 'instance_var'):
print("Instance attribute 'instance_var' exists.") # Output: Exists
3. Use try-except
to Handle NameError
Attempt to access the variable and catch a NameError
if it doesn’t exist.
Example 4: Check Any Variable (Global/Local)
try:
print(z) # Access a variable that may not exist
except NameError:
print("Variable 'z' is not defined.")
# Output: Variable 'z' is not defined.
4. Check Variables in Nested Scopes
For nested functions or modules, use vars()
or inspect the object’s __dict__
.
Example 5: Nested Function Scope
def outer():
outer_var = 50
def inner():
if 'outer_var' in globals(): # Check global scope
print("outer_var is global.")
elif 'outer_var' in locals(): # Check local scope of `inner`
print("outer_var is local to inner.")
else:
print("outer_var not found.")
inner()
outer() # Output: outer_var not found (it's in `outer`, not `inner` or global)
5. Check for Deleted Variables
Even if a variable was deleted (del
), globals()
/locals()
will reflect its absence.
Example 6: Variable Deletion
a = 100
del a # Delete the variable
if 'a' in globals():
print("'a' still exists.")
else:
print("'a' no longer exists.") # Output: 'a' no longer exists
Key Methods Summary
Method | Use Case |
---|---|
'var' in globals() | Check if a global variable exists. |
'var' in locals() | Check if a local variable exists. |
hasattr(obj, 'attr') | Check if an object attribute exists. |
try-except NameError | General check for any variable existence. |
Best Practices
- Use
globals()
/locals()
for checking variables in specific scopes. - Use
hasattr()
for object attributes or class-level variables. - Avoid
try-except
Overuse: Reserve for cases where variable existence is uncertain and errors need graceful handling.
By using these methods, you can safely check for variable existence in Python!