Вы обрабатываете события, где поле utm_source может отсутствовать, и это нормальная ситуация по данным. Какой подход обычно лучше, чем перехватывать KeyError ради подстановки значения по умолчанию?

AПревратить событие в строку через str(event) и искать подстроку, при отсутствии подставлять значение по умолчанию
BБрать значение через event['utm_source'] и оборачивать конвейер в except Exception: для перехвата ошибок ключей
CИспользовать event.get('utm_source', 'unknown') для получения значения по умолчанию без возбуждения исключения
DПринудительно возбуждать raise KeyError('utm_source'), чтобы заполнить значение по умолчанию в обработчике
Правильный ответ. Если отсутствие ключа ожидаемо, удобнее использовать dict.get(...), чем перехватывать KeyError.

Разбор

Исключения подходят для действительно исключительных ситуаций. Если поле может отсутствовать по данным, вызов event.get('utm_source', 'unknown') делает намерение явным, упрощает код и уменьшает шум при отладке. Перехват KeyError уместен, когда ключ обязан быть и его отсутствие — нарушение контракта; ловить исключения «на всякий случай» через широкий except Exception: опасно, потому что заглушает и настоящие ошибки.

Проверь себя · 1/3разбор после ответа
В отчёте вы считаете сумму и случайно складываете число и строку: total + "10". Какое исключение наиболее вероятно?
Тренировать Python в Telegram

Ещё вопросы по теме «Исключения и отладка»