Типичные улучшения

Для поиска по тегу начните название тега с символа '@'.

Улучшения, показаны 50 из 52.

Не переизобретайте механизм исключений

Когда-то в программах не было исключений и их код был усыпан бесконечными проверками — удачно …

Введите свой тип исключений

Если программа сообщает о проблеме с помощью исключения `Exception('что-то случилось')`, то перехватить его будет сложно. …

Не переизобретайте механизм исключений

Когда-то в программах не было исключений и их код был усыпан бесконечными проверками — удачно …

Проверьте обработку исключений

Если блок кода внутри `except` сломан, то этого легко не заметить. Сначала программа будет отлично …

Используйте исключения из атрибутов модели

Django создаёт исключения `DoesNotExist` и `MultipleObjectsReturned` как атрибуты каждой модели, чтобы можно было обработать ошибку …

Отложите перехват исключения

В работе с исключениями всегда следуйте правилу **«Бросай рано, обрабатывай поздно»**. Порой это контринтуитивно — …

Проверьте обработку исключений

Если блок кода внутри `except` сломан, то этого легко не заметить. Сначала программа будет отлично …

Используйте исключения из атрибутов модели

Django создаёт исключения `DoesNotExist` и `MultipleObjectsReturned` как атрибуты каждой модели, чтобы можно было обработать ошибку …

Сделайте except избирательным

Когда вы не указываете какое исключение хотите перехватить, то перехватываются все. Если в блоке кода …

Не перехватывайте исключения просто так

В коде ниже вы перехватываете исключение. Но зачем? Программисту они только помешают. Вместо ваших сообщений …

Добавьте обработку ошибок VK api

Все запросы к VK API всегда возвращают статус код `200`, даже если там произошла ошибка. …

Вынесите решение проблемы наружу функции

Порой функция обещает вернуть полезные данные, но сделать этого не может — не нашла файл, …

Предупредите код снаружи функции о проблеме

Если функция не справилась со своей задачей, то внешнему коду полезно об этом знать. Вдруг, …

Сделайте скрипт устойчивым к разрыву соединения

Если долго держать открытым соединение с сервером, то рано или поздно случится обрыв: админ перезапустит …

Обработайте DoesNotExist

При вызове метода `QuerySet.get(…)` может так случиться, что искомой записи в базе не будет, и …

Используйте contextlib.suppress

Если программист хочет проигнорировать какое-нибудь исключение, то часто получается подобный код: ```python try: os.remove('somefile.tmp') except …

Сделайте функцию требовательной к качеству входных данных

Функция не обязана работать с абсолютно любыми входными данными. Правильно и удобно делать часть аргументов …

Отпустите CancelledError

Когда asyncio закидывает внутрь корутины `CancelledError`, то ожидает что исключение всплывет вверх по стеку вызовов …

Обработайте MultipleObjectsReturned

При вызове метода `QuerySet.get` помимо исключения `DoesNotExist` возможна еще одна ситуация — вместо одной записи …

Исправьте реакцию на ReadTimeout в long polling запросе

Исключение `ReadTimeout` возникает если сервер не отвечает так долго, что клиент, не дождавшись, сам разрывает …

Сократите размер блоков `try...except`

Внутри `try...except` должен быть только тот код, для которого этот блок был добавлен. Излишняя логика …

Проверьте HTTP статус ответа

Интернет так устроен, что даже если сайт не может обработать запрос, он всё равно обязан …

Остановите процесс zip в случае сбоя

Сейчас, если что-то пойдет не так, то в системе останется работать зависший процесс zip. > …

Вынесите решение проблемы наружу функции

Порой функция обещает вернуть полезные данные, но сделать этого не может — не нашла файл, …

Предупредите код снаружи функции о проблеме

Если функция не справилась со своей задачей, то внешнему коду полезно об этом знать. Вдруг, …

Не используйте get_object_or_404 вне View

Функция `get_object_or_404` нужна для View. Вне View её использовать не стоит. Вместо неё лучше используйте …

Сделайте скрипт устойчивым к разрыву соединения

Если долго держать открытым соединение с сервером, то рано или поздно случится обрыв: админ перезапустит …

Воспользуйтесь методом QuerySet.get

Поиск записи в базе данных по ключу, например, по `id` или `slug`, требуется настолько часто, …

Обработайте DoesNotExist

При вызове метода `QuerySet.get(…)` может так случиться, что искомой записи в базе не будет, и …

Проверьте ответ tululu на редирект

Сайт tululu ведёт себя нестандартно — в любой непонятной ситуации он вместо 404 присылает редирект …

Протестируйте программу на неполном словаре

Метод словаря `get(key)` отличается от обычного индекса `[key]` реакцией на отсутствующий ключ. Вместо исключения `KeyError` …

Уберите лишние преобразования типов

Преобразования типов бывают лишними. Посмотрите на эти строки кода: ```python text = 'Найдено {} записей'.format(str(len(records))) …

Повысьте надежность операций с файлами

Каждый вызов `open(…)`, требует своего `close()`. Такого мнения придерживается операционная система. Она выделяет ресурсы при …

Избавьтесь от лишних классов

Использование классов в коде усложняет программу. Создатели библиотек знают об этом, поэтому пишут подробную документацию …

Разбейте коммит на несколько атомарных

Если объединять много правок в один коммит, то вся история изменений будет складываться из названий …

Выберите между raise_for_status и ok

Метод `response.raise_for_status()` выкидывает исключение, если срабатывает условие `not response.ok`. По этой причине нет смысла повторно …

Структурируйте скрипт

Общая структура программы такова: 1. Импорты 2. Глобальные константы 3. Объявления функций 4. Объявление `def …

Отпустите CancelledError

Когда asyncio закидывает внутрь корутины `CancelledError`, то ожидает что исключение всплывет вверх по стеку вызовов …

Сделайте logger глобальной переменной

Обычно логер нужен сразу внутри многих функций, и, чтобы не вызывать `getLogger` много раз внутри …

Обработайте MultipleObjectsReturned

При вызове метода `QuerySet.get` помимо исключения `DoesNotExist` возможна еще одна ситуация — вместо одной записи …

Исправьте реакцию на ReadTimeout в long polling запросе

Исключение `ReadTimeout` возникает если сервер не отвечает так долго, что клиент, не дождавшись, сам разрывает …

Подготовьте парсер к сетевым сбоям

От обычно скрипта парсер отличается тем, что работает долго и зависит от надёжности сетевого соединения. …

Посчитайте количество записей на стороне БД

В Django количество записей внутри `QuerySet` можно посчитать с помощью самой обычной функции `len(…)`. Выглядит …

Не трогайте стили общих компонентов

Некоторые компоненты на странице являются общими. Например, иконки Font-Awesome подключаются всего раз в шапке файла, …

Очистите логи Rollbar от бесполезных HTTP404

Если не побеспокоиться заранее об обработке HTTP 404, то ваши логи будут завалены бесполезными сообщениями. …

Избавьтесь от самописных примесей (mixins)

Mixins – это худшее, что может случиться с вашим кодом. Они подрывают стабильность кода, усложняют …

Не путайте адрес и путь

Адрес и путь похожи, но это не синонимы. **Путь** -- это локально, в файловой системе. …

Добавьте .dockerignore

Файл .dockerignore позволяет исключить пути из образа контейнера

Укажите другие места работы

Даже если ваши предыдущие места работы с IT не связаны, их всё равно будет не …

Сообщите об ошибке HTTP запроса

Иногда программе лучше сразу сломаться, сделать это с грохотом и трейсбеком, чем замалчивать ошибку и …

deprecated