#python python... PYTHON 🔛 🚀
11 subscribers
914 photos
7 videos
158 files
1.54K links
Download Telegram
Forwarded from Data Whisperer
Lineage для кода: Визуализация зависимостей в Python-проектах

В мире данных мы привыкли к инструментам вроде dbt и datahub, которые отлично справляются с построением графов зависимостей для таблиц в базах данных. Но что делать, когда нужно разобраться в структуре кодовой базы?

Проблема

Недавно я столкнулся с задачей анализа старого проекта, где:

- Множество взаимосвязанных модулей
- Отсутствие тестов
- Сложная логика взаимодействия компонентов

Решение: pydeps 🛠

В поисках инструмента для визуализации зависимостей я обнаружил pydeps - Python-модуль, который:

- Анализирует структуру проекта
- Строит наглядный граф зависимостей
- Экспортирует результат в SVG-формат

Преимущества использования

- Быстрое понимание архитектуры проекта
- Визуальное отслеживание зависимостей
- Помощь в рефакторинге и написании тестов

💡 Этот инструмент особенно полезен при работе с legacy-кодом или при погружении в новый проект.


pip install pydeps
pydeps your_project_path
Декоратор override

@override используется для переопределения методов в классах-наследниках. Он позволяет указать, что метод в подклассе переопределяет метод базового класса.

Это может быть полезно для:

— Повышения читабельности кода, так как сразу видно, какие методы переопределены.

— Выявления ошибок: если имя метода в дочернем классе не совпадает с именем в родительском, будет выдана ошибка.

— Проверки типов аргументов: декоратор гарантирует, что типы аргументов совпадают с базовым методом.

#python #decorators
Summarize300Bot, [Dec 5, 2024 at 12:13]
Link

Обработка новых исправимых ошибок
• Код должен исправить ошибку и продолжить работу.Link
• Пример: установка значения year равным unknown для записи в базу данных.Link

Обработка всплывающих исправляемых ошибок
• Код, вызвавший функцию, должен устранить ошибку и продолжить работу.Link
• Пример: использование EAFP для обнаружения и устранения ошибки.Link

Обработка ошибок в Python
• Функция может возвращать исполнителя из базы данных, но иногда это приводит к сбою.Link
• Используется EAFP для перехвата ошибки NotFound и добавления неизвестного исполнителя в базу данных.Link
• Код знает, как настроить состояние приложения для продолжения работы.Link

Обработка новых неисправимых ошибок
• Если ошибка не может быть исправлена, создается исключение для уведомления вызывающей стороны.Link
• Исключение может стать исправимым, достигнув высокой позиции в стеке вызовов.Link
• Пример: отсутствие названия песни является неисправимой ошибкой.Link

Обработка всплывающих неисправимых ошибок
Summarize300Bot, [Dec 5, 2024 at 12:13]
• В некоторых случаях ошибки не могут быть исправлены, и ничего не делается.Link
• Это позволяет исключениям всплывать и обрабатываться на более высоком уровне.Link
• Пример: ошибки могут возникать из-за проблем с базой данных или пользователем.Link

Перехват всех исключений
• Перехват всех исключений на самом высоком уровне предотвращает сбой приложения.Link
• Пример: приложение командной строки завершает работу с кодом ошибки при сбое.Link
• Перехват всех исключений является распространенным шаблоном в веб-фреймворках и GUI-инструментах.Link

Пример улучшения кода
• Использование logger.exception() вместо logger.error() для регистрации ошибок с трассировкой стека.Link
• Пример: улучшение обработки ошибок в Flask-SQLAlchemy для записи в базу данных.Link

Обработка ошибок в Flask
• Flask отлавливает все ошибки и записывает их в журналLink
• Возвращает клиенту сообщение об ошибке 500Link
• Расширение Flask-SQLAlchemy выполняет откат сеанса при ошибке базы данныхLink

Преимущества переноса логики обработки ошибок
Summarize300Bot, [Dec 5, 2024 at 12:13]
Полное руководство по обработке ошибок в Python

Основы обработки ошибок в Python
• Существует два основных стиля обработки ошибок: LBYL и EAFP.Link
• LBYL требует проверки условий перед выполнением действия, что сложно и подвержено состояниям гонки.Link
• EAFP выполняет действие, а затем обрабатывает ошибки, что предпочтительнее в большинстве случаев.Link

Проблемы с перехватом всех исключений
• Перехват всех исключений может привести к потере багов, проявляющихся как неожиданные исключения.Link
• Рекомендуется перехватывать только необходимые классы исключений или вообще не перехватывать их.