#python python... PYTHON 🔛 🚀 – Telegram
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
• Рекомендуется перехватывать только необходимые классы исключений или вообще не перехватывать их.
Николай Крупий, [Dec 5, 2024 at 12:13]
Мигель Гринберг, известный своим мега-туториалом по Flask написал большой пост про обработку ошибок в python. Вопросы "когда и какие эксепшены обрабатывать" и "откуда мне узнать, какие эксепшены тут могут возникнуть" особенно актуальны у новичков, я даже у мидлов видел с этим затруднения. Статья довольно длинная, но я очень рекомендую потратить время и почитать https://blog.miguelgrinberg.com/post/the-ultimate-guide-to-error-handling-in-python

Оказывается, на хабре опубликовали перевод статьи https://habr.com/ru/articles/853056/
Summarize300Bot, [Dec 5, 2024 at 12:13]
• Ошибки могут возникать без необходимости их отлавливатьLink
• Упрощение обслуживания и чтения кода
• Лучший контроль над реакцией приложения на ошибкиLink

Различия между ошибками в разработке и производстве
• В разработке приложение может выходить из строя для отладкиLink
• В производстве приложение должно быть безупречнымLink
• Обработка ошибок должна быть в одном месте и отдельно от логики приложенияLink

Пример с командной строкой
• В режиме разработки повторно вызываются исключения для отладкиLink
• Рабочая версия продолжает отслеживать ошибки и предотвращать сбоиLink
• Логике приложения не нужно знать о различиях в конфигурацииLink

Сравнение с веб-фреймворками
• Многие веб-фреймворки имеют режим разработки или отладкиLink
• Решение, показанное в CLI-приложении, применимо к веб-приложениямLink

Вывод
• Статья учит лучше писать код для обработки ошибокLink
Summarize300Bot, [Dec 5, 2024 at 12:13]
• При возникновении вопросов можно обращаться за помощью
Summarize300Bot, [Dec 5, 2024 at 12:13]
Полное руководство по обработке ошибок в Python

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

Проблемы с LBYL
• LBYL требует знания всех возможных причин ошибок, что сложно.Link
• Возможны условия гонки при проверке условий перед выполнением действия.Link

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

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

Типы ошибок и их обработка
• Исправимые ошибки можно исправить и продолжить работу.Link
• Неустранимые ошибки требуют прерывания выполнения кода.
Summarize300Bot, [Dec 5, 2024 at 12:13]
Link

Классификация ошибок
• Ошибки делятся на новые и всплывающие.Link
• Новые ошибки генерируются самим кодом, всплывающие — вызванными функциями.Link
• Ошибки могут быть восстанавливаемыми или невосстанавливаемыми.Link

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

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

Обработка ошибок типа 1: восстанавливаемые ошибки
Summarize300Bot, [Dec 5, 2024 at 12:13]
Link

Перехват всех исключений
• Перехват всех исключений на верхнем уровне предотвращает вылет приложенияLink
• Пример: Flask и Tkinter перехватывают все исключения на верхнем уровнеLink

Пример улучшения кода
• Использование Flask-SQLAlchemy для обработки ошибок баз данныхLink
• Пример: route записывает сообщение об ошибке и откатывает сессию базы данных
Summarize300Bot, [Dec 5, 2024 at 12:13]
• Код знает, как восстановиться после ошибки и продолжить работуLink
• Используется EAFP для перехвата ошибки и восстановленияLink

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

Обработка ошибок типа 3: всплывающие невосстанавливаемые ошибки
• Код не знает, как восстановить, но позволяет ошибке всплыватьLink
• Ничего не делается, чтобы ошибка достигла уровня, где её можно обработать
Summarize300Bot, [Dec 5, 2024 at 12:13]
Link
Summarize300Bot, [Dec 5, 2024 at 12:13]
Link
• В продакшене приложение перехватывает все ошибки и предотвращает вылеты.Link
• Логике приложения не нужно знать о различиях конфигурации.Link

Реализация в веб-фреймворках
• Многие веб-фреймворки имеют режим разработки или отладки.Link
• Отображение вылетов в консоли или веб-браузере.Link
• Решение, показанное на примере CLI-приложения, реализовано в веб-приложениях.