В Python ошибка KeyError возникает, когда мы обращаемся к словарю по ключу, которого в нём нет. Рассмотрим пример:

dictionary = {"name": "John", "age": 25}
print(dictionary["profession"])

В представленном фрагменте кода при попытке вывести на экран значение словаря по ключу «профессия» возникает ошибка KeyError, поскольку такого ключа в словаре нет.

Произошла ошибка ключа словаря Python

Содержание

Почему возникает ошибка ключа, когда ключ существует?

Несмотря на то, что ключ существует в словаре, ошибка KeyError все равно может возникнуть по разным причинам:

  1. Чувствительность к регистру: Python — язык, чувствительный к регистру. Поэтому «Ключ» и «ключ» — это разные вещи. Если ваш словарь содержит ключ «Key», и вы попытаетесь получить к нему доступ с помощью «key», будет выдано KeyError.
  2. Ведущие или конечные пробелы: если ваш словарный ключ включает начальные или конечные пробелы, например, «key», и вы попытаетесь получить к нему доступ без включения этих пробелов, это приведет к ошибке KeyError.
  3. Неправильный тип данных. Тип данных ключа также имеет значение. Например, целое число 1 не совпадает со строкой «1». Если ваш ключ словаря является целым числом и вы пытаетесь получить к нему доступ с помощью строки(или наоборот), это вызовет ошибку KeyError.

Как избежать ошибок

Проверьте, существует ли ключ

Вы можете проверить, существует ли ключ в словаре, прежде чем обращаться к нему:

state_info = {
    "State": "California",
    "Capital": "Sacramento",
    "Region": "West"
}

key_to_check = "State"

if key_to_check in state_info:
    print(state_info[key_to_check])
else:
    print(f"Key '{key_to_check}' does not exist in the dictionary.")

В этом коде мы сначала проверяем, есть ли в словаре Python state_info ключ, который мы ищем, с помощью оператора in. Если ключ найден, мы выводим его значение. Если же ключ не обнаружен, то выводится сообщение о том, что ключ не найден.

Выход:

Проверьте, существует ли ключ

Используйте метод get()

В Python есть метод get(), который позволяет получить значение ключа из словаря. Если ключ существует, то метод вернёт его значение. Если же ключа нет, то метод вернёт значение по умолчанию.

car_info = {
    "Make": "Ford",
    "Model": "Mustang",
    "Year": 2018
}

key_to_check = "Engine"

print(car_info.get(key_to_check, "Key does not exist in the dictionary."))

Здесь мы пытаемся получить значение ключа «Engine» с помощью метода get(). Поскольку в словаре car_info нет ключа «Двигатель», метод get() возвращает заранее заданное значение по умолчанию: «Ключ отсутствует в словаре».

Выход:

Используйте метод get()

Используйте dict.setdefault()

Метод setdefault() проверяет, существует ли ключ в словаре. Если ключ уже есть, то метод возвращает значение, связанное с этим ключом. Если же ключа нет, то метод добавляет пару «ключ-значение» в словарь.

book_info = {
    "Title": "To Kill a Mockingbird",
    "Author": "Harper Lee",
    "Publication Year": 1960
}

key_to_check = "Pages"

value = book_info.setdefault(key_to_check, "Unknown")
print(value)
print(book_info)

Поскольку в словаре book_info нет ключа «Страницы», функция setdefault() добавляет этот ключ со значением «Неизвестно» в словарь. Теперь словарь book_info содержит новую пару «ключ-значение»: «Страницы»: «Неизвестно».

Выход:

Используйте dict.setdefault()

Обработка KeyError с использованием обработки исключений

В Python вы можете использовать блок try-except для обработки ошибок и исключений. Это применимо и к KeyError.

team_info = {
    "Team Name": "Los Angeles Lakers",
    "Founded": 1947,
    "Championships": 17
}

key_to_check = "League"

try:
    print(team_info[key_to_check])
except KeyError:
    print(f"Key '{key_to_check}' does not exist in the dictionary.")

В этом случае мы пытаемся вывести значение «Лига» из словаря team_info. Поскольку такого ключа не существует, возникнет ошибка KeyError. Однако благодаря конструкции try-except Python выполняет блок исключений, выводя сообщение о том, что указанный ключ отсутствует.

Выход:

Обработка KeyError с использованием обработки исключений

Заключение

Хотя KeyError обычно возникает, когда указанный ключ отсутствует в словаре, иногда эта ошибка может появляться, даже если ключ кажется существующим. Причиной этому могут быть такие факторы, как чувствительность к регистру, наличие начальных или конечных пробелов или неправильный тип данных.

Чтобы избежать этой ошибки, можно использовать различные методы, такие как условные проверки, методы get(), setdefault() и обработку исключений. Понимание природы этих ошибок и возможных решений поможет вам создавать более надёжный и безошибочный код на Python.

Добавить комментарий