NameError in Python — name is not defined Fix (2026) | Tutorials Logic
What is This Error?
The NameError occurs when you try to use a variable, function, or module name that Python doesn't recognize. This means the name hasn't been defined yet, is misspelled, or is out of scope.
Error Message:
NameError: name 'variable_name' is not defined
Common Causes
Quick Fix (TL;DR)
# ❌ Problem
print(message) # NameError: name 'message' is not defined
# ✅ Solution: Define the variable first
message = "Hello, World!"
print(message)
# ✅ Check for typos
username = "John"
print(username) # Not 'userName' or 'user_name'
Common Scenarios & Solutions
Scenario 1: Using Variable Before Definition
The most common cause - trying to use a variable before it has been assigned a value.
print(total) # NameError!
total = 100
total = 100 # Define first
print(total) # Then use
Scenario 2: Typo in Variable Name
Misspelling a variable name or using incorrect case (Python is case-sensitive).
user_name = "Alice"
print(username) # NameError: 'username' vs 'user_name'
firstName = "Bob"
print(firstname) # NameError: case mismatch!
user_name = "Alice"
print(user_name) # Exact match
firstName = "Bob"
print(firstName) # Exact case match
# Use consistent naming convention (snake_case recommended)
user_name = "Alice"
first_name = "Bob"
Scenario 3: Variable Out of Scope
Trying to access a variable defined inside a function from outside, or vice versa.
def calculate():
result = 100
print(result) # NameError: result is local to calculate()
# Solution 1: Return the value
def calculate():
result = 100
return result
result = calculate()
print(result)
# Solution 2: Use global variable (not recommended)
result = 0
def calculate():
global result
result = 100
calculate()
print(result)
# Solution 3: Define outside function
result = 100
def calculate():
print(result) # Can read global variable
calculate()
Scenario 4: Forgetting to Import Module
Using a module or function without importing it first.
result = math.sqrt(16) # NameError: name 'math' is not defined
data = json.loads('{"key": "value"}') # NameError!
import math
result = math.sqrt(16)
import json
data = json.loads('{"key": "value"}')
# Or import specific functions
from math import sqrt
result = sqrt(16)
from json import loads
data = loads('{"key": "value"}')
Scenario 5: String Quotes Missing
Forgetting quotes around strings makes Python think it's a variable name.
name = Alice # NameError: name 'Alice' is not defined
print(Hello) # NameError!
name = "Alice" # Add quotes for strings
print("Hello") # Strings need quotes
Best Practices to Avoid This Error
Related Errors
Key Takeaways
- NameError occurs when using undefined variables, functions, or modules
- Always define variables before using them in your code
- Python is case-sensitive - "name" and "Name" are different variables
- Import modules at the top of your file before using them
- Variables defined inside functions are local and can't be accessed outside
- Use IDE autocomplete and linters to catch undefined names early
Frequently Asked Questions
Level Up Your Python Skills
Master Python with these hand-picked resources
10,000+ learners
Free forever
Updated 2026
Related Python Topics