Your Page Title
🔍

    Python KeyError

    1. What is a KeyError?

    A KeyError in Python is an exception that occurs when trying to access a dictionary key that does not exist. This error is commonly encountered when working with dictionaries and data structures that use key-value pairs.

    In Python, dictionaries store data in a key-value format:

    my_dict = {"name": "Alice", "age": 25}

    Each key in the dictionary must be unique, and attempting to retrieve a key that is not in the dictionary results in a KeyError.

    2. Why Does KeyError Occur?

    A KeyError typically occurs in the following situations:

    • Accessing a missing key in a dictionary
    • Using incorrect capitalization (dictionary keys are case-sensitive)
    • Deleting a key and later trying to access it
    • Incorrectly accessing a nested dictionary
    • Using a wrong key in a Pandas DataFrame

    3. Causes of KeyError with Examples

    Example 1: Accessing a Missing Key

    A KeyError occurs when trying to retrieve a key that does not exist in the dictionary.

    data = {"apple": 10, "banana": 5}
    print(data["mango"])  # 'mango' key does not exist

    Output:

    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    KeyError: 'mango'

    Example 2: Case Sensitivity of Keys

    Dictionary keys are case-sensitive. If the key is not in the exact form stored, a KeyError occurs.

    my_dict = {"Name": "John"}
    print(my_dict["name"])  # 'Name' and 'name' are different keys

    Output:

    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    KeyError: 'name'

    Example 3: Accessing a Deleted Key

    If a key is removed from a dictionary and later accessed, a KeyError occurs.

    fruits = {"apple": 5, "banana": 10}
    del fruits["banana"]  # Removing the key
    print(fruits["banana"])  # Accessing deleted key

    Output:

    Traceback (most recent call last):
      File "<stdin>", line 3, in <module>
    KeyError: 'banana'

    Example 4: Accessing a Nested Dictionary Incorrectly

    If a nested dictionary is not properly accessed, a KeyError may occur.

    users = {"user1": {"name": "Alice", "age": 25}}
    print(users["user2"]["name"])  # 'user2' does not exist

    Output:

    Traceback (most recent call last):
      File "<stdin>", line 2, in <module>
    KeyError: 'user2'

    4. How to Handle KeyError in Python?

    To prevent or handle KeyError, use methods such as .get(), in operator, try-except, and .setdefault().

    Solution 1: Using .get() Method

    The .get() method returns None or a default value if the key is missing, preventing a KeyError.

    my_dict = {"name": "Alice", "age": 25}
    print(my_dict.get("gender"))  # Returns None
    print(my_dict.get("gender", "Not Found"))  # Returns a default value

    Output:

    None
    Not Found

    Solution 2: Checking Key Existence with in Operator

    Use the in operator to check if a key exists before accessing it.

    my_dict = {"name": "Alice", "age": 25}
    
    if "gender" in my_dict:
        print(my_dict["gender"])
    else:
        print("Key not found")

    Output:

    Key not found

    Solution 3: Handling KeyError with try-except

    A try-except block allows handling of KeyError without crashing the program.

    my_dict = {"name": "Alice", "age": 25}
    
    try:
        print(my_dict["gender"])
    except KeyError:
        print("Key does not exist!")

    Output:

    Key does not exist!

    Solution 4: Using .setdefault() Method

    .setdefault() returns the key’s value if it exists, or sets a default value if the key is missing.

    my_dict = {"name": "Alice"}
    my_dict.setdefault("age", 30)  # Adds 'age' if not present
    print(my_dict)

    Output:

    {'name': 'Alice', 'age': 30}

    5. Handling KeyError in Nested Dictionaries

    Using .get() to Avoid KeyError

    Using .get() when accessing a nested dictionary prevents errors.

    users = {"user1": {"name": "Alice", "age": 25}}
    print(users.get("user2", {}).get("name", "Unknown"))  # Avoids KeyError

    Output:

    Unknown

    Using try-except for Nested Dictionaries

    If a nested key may be missing, handle it using try-except.

    users = {"user1": {"name": "Alice", "age": 25}}
    
    try:
        print(users["user2"]["name"])
    except KeyError:
        print("User not found!")

    Output:

    User not found!

    6. Handling KeyError in Pandas DataFrames

    A KeyError can also occur when accessing a missing column in a Pandas DataFrame.

    Example: Accessing a Non-Existent Column

    import pandas as pd
    
    df = pd.DataFrame({"name": ["Alice", "Bob"], "age": [25, 30]})
    print(df["gender"])  # Column 'gender' does not exist

    Output:

    KeyError: 'gender'

    Fix 1: Using .get() with .loc[]

    print(df.get("gender", "Column Not Found"))  # Returns default value

    Output:

    Column Not Found

    Fix 2: Using try-except

    try:
        print(df["gender"])
    except KeyError:
        print("Column does not exist!")

    Output:

    Column does not exist!

    7. Summary Table

    MethodDescriptionPrevents KeyError?
    .get(key)Returns None or a default value if key is missing
    in operatorChecks if key exists before accessing it
    try-exceptCatches KeyError and handles it
    .setdefault(key, default)Returns key’s value if exists, otherwise sets default

    By following these methods, you can effectively prevent and handle KeyError in Python programs.