Вложенный словарь в Python содержит словарь в качестве значения для своих ключей. Если попытаться получить доступ к несуществующему ключу во вложенном словаре, возникнет ошибка KeyError.
Эта ошибка часто встречается при работе с вложенными словарями, где на одном или нескольких уровнях может отсутствовать нужный ключ. В этой статье мы рассмотрим, как эффективно обрабатывать такие ошибки KeyError во вложенных словарях Python.
Представим, что у нас есть вложенный словарь, содержащий информацию о голливудских актёрах и их фильмах:
hollywood = { 'Leonardo DiCaprio': { 'movie': 'Inception', 'year': 2010 }, 'Tom Hanks': { 'movie': 'Forrest Gump', 'year': 1994 } } print(hollywood['Johnny Depp']['movie'])
Вывод: если мы попробуем обратиться к несуществующему ключу, то Python выдаст ошибку KeyError, так как в словаре нет такого элемента, как «Джонни Депп».
Traceback(most recent call last): File "C:\Users\USER\PycharmProjects\pythonProject\TS\main.py", line 12, in print(hollywood['Johnny Depp']['movie']) ~~~~~~~~~^^^^^^^^^^^^^^^ KeyError: 'Johnny Depp'
Обработка KeyError
Мы можем обрабатывать эти исключения во вложенном словаре Python следующим образом:
- Использование блоков try-Exception
- Использование метода get() словаря
Это позволяет нам предоставить значение по умолчанию, если ключ не найден.
Метод 1: с помощью блока try-Exception
Один из способов обработки исключений — использование блоков try-except. В этом случае Python «пытается» выполнить блок кода из блока try, но если он встречает исключение, то «перехватывает» его и выполняет альтернативный блок кода из блока except.
Представим, что у нас есть вложенный словарь Python, который представляет набор товаров на платформе электронной коммерции, похожей на Amazon. С каждым товаром связаны такие данные, как цена и наличие.
amazon_items = { 'Echo Dot': { 'price': 49.99, 'stock': 1000 }, 'Kindle Paperwhite': { 'price': 129.99, 'stock': 500 } } try: print(amazon_items['iPhone 13']['price']) except KeyError: print('Item not found in the store.')
Теперь, если клиент захочет узнать цену на «iPhone 13», мы постараемся найти эту информацию. Однако «iPhone 13» нет в нашем словаре, и Python выдаст ошибку KeyError.
Мы можем обработать эту ошибку, используя блок try-except в Python.
В результате блок исключений перехватывает эту ошибку и вместо завершения работы программы Python выводит сообщение «Элемент не найден в магазине». Таким образом, пользователь получает понятное сообщение, а не видит ошибку.
Item not found in the store.
Примечание: Если мы не хотим, чтобы какое-либо сообщение отображалось, мы можем использовать ключевое слово Python `pass` в блоке исключений. Это позволит просто пропустить выполнение кода, если возникнет какое-либо исключение.
Таким образом, мы используем метод `try-except`, чтобы обработать ошибку `KeyError` во вложенном словаре Python.
Метод 2: с помощью метода get()
Ещё один способ обработки ошибки KeyError в Python — это использование метода get() для словарей. Этот метод позволяет указать значение по умолчанию, которое будет возвращено, если ключ не найден.
Представим, что у нас есть вложенный словарь с информацией о различных достопримечательностях Нью-Йорка. Допустим, мы хотим узнать, когда был построен «Центральный парк», но этого парка нет в словаре. В этом случае Python выдаст ошибку KeyError.
Чтобы обработать эту ошибку, мы можем воспользоваться методом get(). Этот метод попытается получить значение для указанного ключа. Если ключ не найден, то будет возвращено значение по умолчанию (если оно указано) или None.
new_york_landmarks = { 'Statue of Liberty': { 'location': 'Liberty Island', 'year_built': 1886 }, 'Empire State Building': { 'location': 'Midtown Manhattan', 'year_built': 1931 } } landmark_info = new_york_landmarks.get('Central Park', {}) year_built = landmark_info.get('year_built', 'Year not found.') print(year_built)
Вывод: Первый метод get() пытается получить словарь на Python для «Центрального парка». Если словарь не найден, то возвращается пустой словарь.
Затем второй метод пытается получить значение «year_built» из этого словаря. Однако, поскольку был возвращён пустой словарь Python, «year_built» не будет ключом в этом словаре.
Year not found.
Заключение:
Обработка ошибок KeyError имеет основополагающее значение для обеспечения бесперебойной работы нашего кода Python, особенно при работе с вложенными словарями Python. И метод try-Exception, и метод get() предоставляют способы сделать это, что позволяет нам обеспечить более удобный пользовательский интерфейс.