Python Try/Except и обработка ошибок

Предотвратите сбой ваших скриптов Python. Узнайте, как блокировать try, кроме, наконец, и как правильно создавать пользовательские исключения.

Попробуйте в редакторе

Обзор

В реальном мире программирования ошибки совершенно неизбежны. Файлы могут быть удалены, сетевые подключения могут прерваться, или пользователь может ввести букву, хотя ваш сценарий ожидает число. Если эти сценарии происходят без мер безопасности, Python останавливает выполнение и выдает исключение (ошибку выполнения), приводящее к сбою всей программы. Обработка ошибок — это искусство изящного прогнозирования и управления этими сбоями.

Основой управления ошибками в Python является блочная структура «try» и «Exception». Вы помещаете потенциально опасный код внутри блока try. Python попытается выполнить его. Если происходит ошибка, вместо сбоя Python перехватывает исключение и немедленно переходит к выполнению кода, содержащегося в блоке «исключение». Это позволяет программе восстановиться, отобразить понятное сообщение об ошибке и продолжить работу.

Крайне важно перехватывать конкретные, целевые исключения, а не писать общий блок «кроме:». Например, обнаружение FileNotFoundError или ValueError явно гарантирует, что вы решаете именно ту проблему, которую ожидали, а не случайно маскируете несвязанные ошибки (например, синтаксическую ошибку), о которых вам действительно нужно знать.

Python также предоставляет дополнительный блок else, который выполняется только в том случае, если блок try завершился полностью успешно без каких-либо ошибок. Это идеальное место для логики, от которой абсолютно зависит успех опасной операции. Кроме того, блок «finally» предоставляет возможность выполнить код независимо от того, произошла ли ошибка или нет. Блок «finally» жизненно важен для действий по очистке, таких как закрытие соединений с базой данных или снятие блокировок файлов.

Помимо обнаружения ошибок, Python позволяет разработчикам явно инициировать их с помощью ключевого слова «raise». Вызов исключения позволяет вам применять строгие ограничения в вашей логике, отклоняя недопустимые данные до того, как они испортят состояние вашего приложения. Определяя собственные классы исключений, которые наследуются от базового класса Python Exception, разработчики могут создавать иерархии ошибок, строго специфичные для предметной области, для крупных корпоративных приложений.

Код и вывод выполнения

Создание структурной безопасности при взаимодействии с потенциально опасными или несуществующими файловыми структурами.

def divide_numbers(a, b):
    try:
        result = a / b
    except ZeroDivisionError:
        return "Error: Cannot divide by zero!"
    except TypeError:
        return "Error: Both arguments must be numbers."
    else:
        return f"The result is {result}"
    finally:
        print("Execution completed.")

print(divide_numbers(10, 2))
print(divide_numbers(10, 0))
Терминальный выход
Execution completed.
The result is 5.0
Execution completed.
Error: Cannot divide by zero!

Пошаговая реализация

  • Проверка отправки форм пользователя
  • Обеспечение отсутствия сбоя сетевых запросов по тайм-ауту
  • Безопасное закрытие соединений с базой данных в блокеfinally

Часто задаваемые вопросы

Что такое ключевое слово «поднять»?

Ключевое слово raise используется для целенаправленного возникновения исключения. Вы можете определить, какую ошибку выдавать, а также текст, который будет выводиться пользователю.

Связанные темы

Рекомендуемые ресурсы Python

Расширьте свои знания с помощью соответствующих интерактивных руководств, шпаргалок и сравнений кода.