Python KeyError
The code tries to access a dictionary key that doesn't exist.
Explanation
KeyError occurs when you try to access a dictionary key that doesn't exist in the dictionary. Unlike list indexing which uses numeric positions, dictionary access uses arbitrary keys. If the key hasn't been added to the dictionary, Python raises KeyError. This commonly happens when processing JSON API responses where expected keys are missing, when using defaultdict but the key is accessed incorrectly, or when dictionary key names are misspelled.
Common Causes
- Dictionary key doesn't exist
- Misspelled key name
- API response missing expected keys
- JSON structure different than expected
- Case-sensitive key mismatch
Solution
Use dict.get(key, default) instead of dict[key] to provide a default value. Use defaultdict from collections module to provide default values for missing keys. Check if a key exists with the in operator before accessing it. Use try-except KeyError blocks for handling missing keys. Verify key names match exactly (case-sensitive). Use the setdefault() method to set defaults while accessing.
Code Example
# KeyError from missing key
user = {'name': 'John', 'age': 30}
email = user['email'] # KeyError: 'email'
# Fix: use get with default
email = user.get('email', 'Not provided')
# Check key existence
if 'email' in user:
email = user['email']
# Using defaultdict
from collections import defaultdict
counter = defaultdict(int) # default value is 0
counter['missing'] += 1 # no KeyError, returns 0
# Nested dictionary access
config = {'database': {'host': 'localhost'}}
port = config['database']['port'] # KeyError: 'port'
# Fix: safe nested access
def safe_get(d, *keys, default=None):
for key in keys:
if isinstance(d, dict):
d = d.get(key, default)
else:
return default
return d
port = safe_get(config, 'database', 'port', default=3306)
Error Information
Language
python
Difficulty
Beginner
Views
12
Related Errors
Python
Python RuntimeWarning: coroutine was never awaited
An async coroutine was created but never awaited, so it never executed.
Python
Python EOFError
The input() function encountered end-of-file (no more data to read).
Python
Python TabError
The code uses inconsistent indentation by mixing tabs and spaces.
Python
Python UnicodeDecodeError
Python failed to decode bytes into a string using the specified encoding.