
Свои классы исключений в большом Python-проекте
Когда весь код ловит голый Exception, отладка превращается в раскопки. Разбираем, как построить иерархию своих исключений, где её граница и чем платишь за каждый лишний класс.

Когда весь код ловит голый Exception, отладка превращается в раскопки. Разбираем, как построить иерархию своих исключений, где её граница и чем платишь за каждый лишний класс.

Наивный datetime без таймзоны — источник смещений на несколько часов и дублей в отчётах. Разбираем, где именно ломается работа со временем в Python и как строить конвейер от UTC к локали.

Три способа превратить объект Python в байты и обратно. У каждого своя цена: pickle открывает дыру в безопасности, json теряет типы, msgpack требует зависимости. Разбираем, когда что.

Разбираем два способа сделать командную утилиту на Python: click с декораторами и typer на аннотациях типов. Что выигрываете и чем платите за каждый.

Как разделить настройки для dev и prod, не хранить пароли в git и не получить AttributeError на старте. Разбираем три подхода к конфигурации и цену каждого.

print() и logging.basicConfig не тянут прод: логи текстом невозможно фильтровать, ротация захлёбывается, а под многопоточностью строки перемешиваются. Разбираем, как настроить структурные логи, уровни и ротацию без сюрпризов.

CSV с датами в пяти форматах, дублями и NaN там, где ждёте ноль. Разбираем, чем чистить и валидировать данные на Python: голый pandas, Pydantic и pandera — с ценой каждого подхода.

Вы знаете Python, но ещё не работали с pandas. За час разберём загрузку данных, фильтрацию, группировку и сохранение результата — без лишней теории, только то, что нужно в реальной работе.

Файл на 8 ГБ и 40 миллионов строк, а на машине 16 ГБ памяти. pandas падает с MemoryError, чистый Python читает без проблем, но медленно. Разбираем, где ломается каждый подход и что мерить.

Файл на 8 ГБ не влезает в json.load — процесс убивает по OOM. Разбираем, как ijson читает такой JSON потоком, где он выигрывает у стандартной библиотеки и чем за это платит.

Coverage показал 95%, а прод падает на первом же граничном случае. Разбираем, что реально измеряет покрытие в Python, почему высокое покрытие может врать и какие цифры стоят вашего внимания.

Три инструмента pytest, из-за которых тесты либо читаются за минуту, либо превращаются в копипасту: разбираем, где каждый уместен и чем вы платите за удобство.