448просмотров
83.0%от подписчиков
20 февраля 2026 г.
Score: 493
Сложно понять, что происходит в коде, когда в одной строке выполняется сразу много операций: и вызовы функций, и сложение, и вычитание, и сравнение. Приходится распутывать выражение, мысленно разбирая его на части. Код из нашего примера может выглядеть так: image_links = response.json()['links']['flickr']['original'] for number, link in enumerate(image_links, start=1): ... Если ответ на запрос будет еще где-то использоваться, то его следует закэшировать: response = response.json() image_links = response['links']['flickr']['original'] for number, link in enumerate(image_links, start=1): ... По поводу обработки корнер-кейса с отсутствием значений в словаре: если применить метод get(), то получится нечто страшночитаемое вроде: image_links = data.get('links', {}).get('flickr', {}).get('original', 'default.jpg') При этом смысла продолжать работу функции, когда не удалось добраться до значений нет никакого — странно итерировать по значениям по умолчанию и пытаться что-то считать. Поэтому лучше воспользоваться перехватом исключением: try: image_links = response.json()['links']['flickr']['original'] except KeyError as exc: raise CustomException() from exc Итого — get() хорош, но все-таки когда одноуровневый словарь и есть реальное значение по умолчанию, которое можно и нужно использовать. Но ошибка то может быть не только из-за пустого словаря…😱 try: image_links = response.json()['links']['flickr']['original'] except (KeyError, json.JSONDecodeError, UnicodeDecodeError) as exc: raise CustomException() from exc Так что прикрутите Pydantic валидацию и выдохните! Спасибо большое, что активно писали в комменты и предлагали свои варианты!❤️
448
просмотров
1816
символов
Да
эмодзи
Нет
медиа

Другие посты @devmanwiki

Все посты канала →
Сложно понять, что происходит в коде, когда в одной строке в — @devmanwiki | PostSniper