How to Fix KeyError in Python
DodaTech
Updated Jun 15, 2026
2 min read
Error message: KeyError: 'missing_key'
Python raises KeyError when you try to access a dictionary key that doesn’t exist. It’s the dict equivalent of IndexError for lists.
What Causes It
user = {"name": "Alice", "age": 30}
print(user["email"]) # KeyError: 'email'The key "email" simply doesn’t exist in the dictionary. This happens often with user input, API responses, or configuration data where some fields may be missing.
Fix 1: Use .get() with a Default
user = {"name": "Alice", "age": 30}
# Safe — returns None if key missing
email = user.get("email")
print(email) # None
# With default value
email = user.get("email", "no-reply@example.com")
print(email) # no-reply@example.comFix 2: Use defaultdict
from collections import defaultdict
# Regular dict — KeyError risk
scores = {}
scores["Alice"].append(95) # KeyError!
# defaultdict — auto-creates missing keys
scores = defaultdict(list)
scores["Alice"].append(95) # OK — creates list automatically
scores["Bob"].append(87)
print(dict(scores)) # {'Alice': [95], 'Bob': [87]}This is especially useful when building nested data structures like lists of values grouped by key.
Fix 3: Use setdefault
setdefault() sets a value only if the key is missing, then returns it:
user = {"name": "Alice"}
role = user.setdefault("role", "viewer")
print(role) # viewer
print(user) # {'name': 'Alice', 'role': 'viewer'}
# Second call — key exists, returns existing value
role = user.setdefault("role", "admin")
print(role) # viewer (unchanged)Fix 4: Use try/except
user = {"name": "Alice", "age": 30}
try:
email = user["email"]
except KeyError:
email = "unknown@example.com"
# Or log the error
print("Email not found, using default")Fix 5: Check First with in
user = {"name": "Alice", "age": 30}
if "email" in user:
print(user["email"])
else:
print("Email not provided")This is the most readable approach when you need to branch on key existence.
Prevention
- Use
.get(key, default)for read access — it’s the safest and shortest - Use
defaultdictwhen building dictionaries of lists, sets, or counters - Validate API responses and user input with
.get()before accessing nested keys - When iterating, use
dict.items()to access keys safely - For nested dicts, chain
.get()calls or usecollections.ChainMap - Write unit tests that cover edge cases with missing keys
# Safe nested access
data = {"user": {"profile": {"email": "alice@example.com"}}}
email = data.get("user", {}).get("profile", {}).get("email")
print(email) # alice@example.com — no KeyError even if intermediate is missing Previous
How to Fix ImportError in Python
Next
CherryPy Python Framework Guide — Build Lightweight Web Applications
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro