Вы парсите событие в словарь event. Что произойдёт при обращении event["currency"], если ключа currency в словаре нет?
AБудет выброшен
ValueError.BБудет выброшен
KeyError.CБудет выброшен
TypeError.DБудет выброшен
IndexError.Правильный ответ.
KeyError возникает при обращении к отсутствующему ключу словаря через dict[key].Разбор
Если ключ может отсутствовать «по данным» (это ожидаемо), лучше использовать event.get('currency') или проверку if 'currency' in event:. А если ключ обязан быть, то KeyError — полезный сигнал о нарушении контракта данных, и его стоит не скрывать, а быстро диагностировать.
Проверь себя · 1/3разбор после ответа
Вы обрабатываете события, где поле
utm_source может отсутствовать, и это нормально. Какой подход обычно лучше, чем ловить KeyError ради значения по умолчанию?Ещё вопросы по теме «Исключения и отладка»
- В обработчике данных вы используете конструкцию `try`/`except`/`finally`. Внутри `try` происходит ошибка, она поймана в `except`. Что произойдёт с кодом в `finally`?
- В отчёте вы считаете сумму и случайно складываете число и строку: `total + "10"`. Какое исключение наиболее вероятно?
- Скрипт получает список строк, но иногда он короче ожидаемого. Что произойдёт при обращении `rows[3]`, если в списке всего 3 элемента?
- Вы пишете функцию, которая внутри `try` делает `return`, а в `finally` закрывает ресурс (например, файл или соединение). Что произойдёт с кодом в `finally` при `return` из `try`?
- Вы преобразуете поле из CSV: `price = int(text)`. Иногда там встречается `N/A`. Какой вариант обработки ошибки лучше соответствует цели «точечный `except` (не ловить всё подряд)»?
- Все вопросы по «Исключения и отладка» →