A KeyError
occurs when you try to access a key that no longer exists in a dictionary because it was removed using del
or pop()
.
1. Common Causes and Fixes
Cause 1: Accessing a Key After Deletion
If you delete a key using del
or pop()
and then try to access it, Python will raise a KeyError
.
Incorrect Code:
data = {"name": "Alice", "age": 25}
del data["age"]
print(data["age"]) # Error: 'age' key was deleted
Solution: Check if the key exists before accessing it.
if "age" in data:
print(data["age"])
else:
print("Key not found") # Output: Key not found
Solution: Use .get()
to avoid errors.
print(data.get("age", "Key not found")) # Output: Key not found
Cause 2: Using .pop()
Without a Default Value
If you use .pop()
to remove a key without specifying a default, trying to access it later will result in a KeyError
.
Incorrect Code:
data = {"name": "Alice", "age": 25}
data.pop("age")
print(data["age"]) # Error: 'age' was removed
Solution: Provide a default value to .pop()
.
data.pop("age", None) # Won't raise an error if 'age' is missing
Cause 3: Iterating Over a Dictionary While Modifying It
Removing keys while iterating over a dictionary can lead to errors.
Incorrect Code:
data = {"a": 1, "b": 2, "c": 3}
for key in data:
if key == "b":
del data[key] # Error: RuntimeError due to modifying dictionary during iteration
Solution: Use list()
to create a copy of keys before modifying.
for key in list(data.keys()):
if key == "b":
del data[key]
Cause 4: Removing a Key in One Function and Accessing It in Another
If a function removes a key and another function tries to access it, a KeyError
will occur.
Incorrect Code:
def remove_key(data):
del data["age"]
data = {"name": "Alice", "age": 25}
remove_key(data)
print(data["age"]) # Error: 'age' key was removed
Solution: Handle missing keys properly.
if "age" in data:
print(data["age"])
else:
print("Key not found") # Output: Key not found