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

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

Если мы специально пытаемся получить доступ к ключу со значением None, которого нет в словаре, то получим ошибку KeyError: None.

В этом примере словаря Python указано население некоторых крупных городов США. Города являются ключами, а их население — значениями. Если мы попытаемся получить доступ к населению города, используя ключ None, то получим ошибку, поскольку в словаре нет такого ключа.

city_populations = {
    'New York': 8399000,
    'Los Angeles': 3971000,
    'Chicago': 2726000,
    'Houston': 2323000,
    'Phoenix': 1748000,
}

print(city_populations[None])

Вывод: возникла ошибка KeyError: None, так как None является недопустимым ключом в нашем словаре city_populations. Мы используем только такие ключи, как «Нью-Йорк», «Лос-Анджелес», «Чикаго», «Хьюстон» и «Финикс».

Traceback(most recent call last):
  File "C:\Users\USER\PycharmProjects\pythonProject\TS\main.py", line 9, in 
    print(city_populations[None])
          ~~~~~~~~~~~~~~~~^^^^^^
KeyError: None

Как обрабатывать KeyError None в словаре Python

Содержание

Способы обработки

Существует несколько способов обработки словаря Python KeyError: None. Вот несколько наиболее распространенных и эффективных способов сделать это:

  • Использование метода get().
  • Использование блоков try-Exception.
  • Проверка существования ключа с помощью условного оператора if-else с оператором in.

Метод 1: использование метода Python get()

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

Например, у нас есть словарь, в котором перечислены известные достопримечательности США и указаны штаты, в которых они находятся:

us_landmarks = {
    'Statue of Liberty': 'New York',
    'Mount Rushmore': 'South Dakota',
    'Golden Gate Bridge': 'California',
    'Grand Canyon': 'Arizona',
    'White House': 'Washington, D.C.'
}

print(us_landmarks.get('Disneyland'))

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

None

Метод 1: использование метода Python get()

Метод 2: использование блоков try-Exception

В Python мы можем перехватывать и обрабатывать исключения, используя блоки try-except. Этот метод особенно полезен, когда мы не уверены, существует ли определённый ключ в словаре.

Блок try содержит код, который может вызывать ошибки, а блок except содержит код, который будет выполняться в случае возникновения ошибок.

Например, у нас есть словарь, где ключами являются названия штатов США, а значениями — их первые буквы. Мы можем использовать блоки try-except, чтобы перехватывать ошибки KeyError при попытке получить доступ к ключу, которого может не быть в словаре.

us_state_capitals = {
    'California': 'Sacramento',
    'Texas': 'Austin',
    'Florida': 'Tallahassee',
    'New York': 'Albany',
    'Washington': 'Olympia'
}

try:
    print(us_state_capitals[None])
except KeyError:
    print("State not found")

Вывод: вместо выдачи ошибки KeyError будет напечатано состояние «Состояние не найдено».

State not found

Метод 2: использование блоков try-Exception 

Метод 3: с помощью условного оператора if-else с оператором in

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

Здесь у нас есть словарь, в котором перечислены крупнейшие технологические компании США и их штаб-квартиры:

tech_companies = {
    'Apple': 'Cupertino, California',
    'Microsoft': 'Redmond, Washington',
    'Google': 'Mountain View, California',
    'Facebook': 'Menlo Park, California',
    'Amazon': 'Seattle, Washington'
}

if None in tech_companies:
    print(tech_companies[None])
else:
    print("Company not found")

В результате выводится сообщение «Компания не найдена» вместо возникновения ошибки KeyError.

Company not found

Как обрабатывать KeyError None в словаре Python, используя оператор if-else

Заключение:

Если возникает ошибка KeyError: None, то код может прервать своё выполнение. Однако Python предоставляет несколько методов для корректной обработки этой ситуации, позволяя коду продолжать работу даже при отсутствии ключа.

Метод словаря get() позволяет вернуть значение по умолчанию, если ключ отсутствует. Обработка исключений с помощью блоков try-except предоставляет ещё один способ перехвата ошибки KeyError. Наконец, оператор if-else с использованием ключевого слова in для проверки наличия ключа перед доступом к нему помогает полностью избежать ошибки KeyError.

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