Как обрабатывать исключения в Python (попробуйте, кроме, наконец)

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

Попробуйте это решение в редакторе

Обзор

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

Основным инструментом Python для управления ошибками во время выполнения является блок Try-Exception. Вы помещаете код, который может вызвать ошибку, внутри блока Try и определяете код обработки ошибок внутри одного или нескольких блоковException. Настоятельно рекомендуется указывать точный класс исключений (например, ValueError или ZeroDivisionError), поскольку перехват всех общих исключений («кроме:») может маскировать ошибки.

Чтобы сделать поток исключений более выразительным, Python предоставляет два дополнительных блока: else иfinally. Блок else выполняется только в том случае, если в блоке try не возникло никаких исключений, что полезно для кода, который должен выполняться только в случае успеха. Блок `finally` выполняется *всегда*, независимо от того, произошло ли исключение, что делает его идеальным местом для очистки, например закрытия файлов или подключений к базе данных.

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

Этот сценарий демонстрирует надежную обработку ошибок в Python с использованием try, кроме, else и наконец.

def divide_numbers(a, b):
    try:
        # Code that might raise an exception
        result = a / b
    except ZeroDivisionError:
        # Handling a specific exception
        print("Error: Cannot divide by zero!")
    except TypeError:
        # Handling another exception type
        print("Error: Inputs must be numbers!")
    else:
        # Run only if try block succeeded
        print(f"Success! Result of {a}/{b} is {result}")
    finally:
        # Runs no matter what
        print("Division attempt completed.")

divide_numbers(10, 2)
print("---")
divide_numbers(10, 0)
Терминальный выход
Success! Result of 10/2 is 5.0
Division attempt completed.
---
Error: Cannot divide by zero!
Division attempt completed.

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

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

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

Могу ли я перехватить несколько исключений в одном блоке исключений?

Да, вы можете передать их как кортеж: кроме (ValueError, TypeError) как e:.

Как мне создать свои собственные исключения?

Используйте ключевое слово raise, за которым следует экземпляр исключения: поднять ValueError("Недопустимое значение конфигурации").

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

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

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