Forwarded from Data Whisperer
Lineage для кода: Визуализация зависимостей в Python-проектах
В мире данных мы привыкли к инструментам вроде dbt и datahub, которые отлично справляются с построением графов зависимостей для таблиц в базах данных. Но что делать, когда нужно разобраться в структуре кодовой базы?
Проблема
Недавно я столкнулся с задачей анализа старого проекта, где:
- Множество взаимосвязанных модулей
- Отсутствие тестов
- Сложная логика взаимодействия компонентов
Решение: pydeps 🛠
В поисках инструмента для визуализации зависимостей я обнаружил pydeps - Python-модуль, который:
- Анализирует структуру проекта
- Строит наглядный граф зависимостей
- Экспортирует результат в SVG-формат
Преимущества использования
- Быстрое понимание архитектуры проекта
- Визуальное отслеживание зависимостей
- Помощь в рефакторинге и написании тестов
💡 Этот инструмент особенно полезен при работе с legacy-кодом или при погружении в новый проект.
В мире данных мы привыкли к инструментам вроде dbt и datahub, которые отлично справляются с построением графов зависимостей для таблиц в базах данных. Но что делать, когда нужно разобраться в структуре кодовой базы?
Проблема
Недавно я столкнулся с задачей анализа старого проекта, где:
- Множество взаимосвязанных модулей
- Отсутствие тестов
- Сложная логика взаимодействия компонентов
Решение: pydeps 🛠
В поисках инструмента для визуализации зависимостей я обнаружил pydeps - Python-модуль, который:
- Анализирует структуру проекта
- Строит наглядный граф зависимостей
- Экспортирует результат в SVG-формат
Преимущества использования
- Быстрое понимание архитектуры проекта
- Визуальное отслеживание зависимостей
- Помощь в рефакторинге и написании тестов
💡 Этот инструмент особенно полезен при работе с legacy-кодом или при погружении в новый проект.
pip install pydeps
pydeps your_project_path
Forwarded from Книголюб | Литература
Декоратор override
Это может быть полезно для:
— Повышения читабельности кода, так как сразу видно, какие методы переопределены.
— Выявления ошибок: если имя метода в дочернем классе не совпадает с именем в родительском, будет выдана ошибка.
— Проверки типов аргументов: декоратор гарантирует, что типы аргументов совпадают с базовым методом.
#python #decorators
@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
Обработка всплывающих неисправимых ошибок
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
Преимущества переноса логики обработки ошибок
• В некоторых случаях ошибки не могут быть исправлены, и ничего не делается.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
• Рекомендуется перехватывать только необходимые классы исключений или вообще не перехватывать их.
Полное руководство по обработке ошибок в Python
Основы обработки ошибок в Python
• Существует два основных стиля обработки ошибок: LBYL и EAFP.Link
• LBYL требует проверки условий перед выполнением действия, что сложно и подвержено состояниям гонки.Link
• EAFP выполняет действие, а затем обрабатывает ошибки, что предпочтительнее в большинстве случаев.Link
Проблемы с перехватом всех исключений
• Перехват всех исключений может привести к потере багов, проявляющихся как неожиданные исключения.Link
• Рекомендуется перехватывать только необходимые классы исключений или вообще не перехватывать их.