Skip to content
How to Fix KeyError in Python

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.com

Fix 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 defaultdict when 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 use collections.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

Built by the developers of DodaTech

Doda Browser, DodaZIP & Durga Antivirus Pro