A KeyError
occurs when you try to access a dictionary key that does not exist. Specifically, "KeyError: trying to access an integer key in a string-keyed dictionary"
happens when your dictionary keys are strings, but you attempt to access them using an integer.
1. Common Causes and Fixes
Cause 1: Mixing Integer and String Keys
Python dictionary keys are case-sensitive and type-sensitive. If the keys are stored as strings, accessing them with an integer will raise a KeyError
.
Incorrect Code:
data = {"1": "Alice", "2": "Bob"}
print(data[1]) # Error: 1 is an integer, but keys are strings
Solution: Convert the integer to a string.
print(data[str(1)]) # Output: Alice
Cause 2: Using Numbers Instead of Strings in JSON Data
When working with JSON, keys are often stored as strings, even if they look like numbers.
Incorrect Code:
import json
json_data = '{"10": "John", "20": "Doe"}'
data = json.loads(json_data)
print(data[10]) # Error: 10 is an integer, but keys are strings
Solution: Convert the integer to a string before accessing the key.
print(data[str(10)]) # Output: John
Cause 3: Unintended Integer Conversion
If you store dictionary keys as strings but later try to access them with an integer, it will cause a KeyError
.
Incorrect Code:
data = {"100": "Python", "200": "Java"}
key = 100 # key is an integer
print(data[key]) # Error: 100 is an integer, but dictionary keys are strings
Solution: Convert the integer key to a string.
print(data[str(key)]) # Output: Python
Cause 4: Using Integers Instead of Strings in Pandas DataFrames
When working with Pandas DataFrames, column names are usually stored as strings, not integers.
Incorrect Code:
import pandas as pd
df = pd.DataFrame({"1": [10, 20, 30], "2": [40, 50, 60]})
print(df[1]) # Error: 1 is an integer, but column names are strings
Solution: Convert the column name to a string.
print(df["1"]) # Correct way to access column