WebCraft
11 августа 2026 • Вторник

Обработка ошибок в Python: try, except и исключения

Обработка ошибок в Python: try, except и исключения

Ошибки являются неотъемлемой частью разработки. Пользователь может ввести неверные данные, файл может отсутствовать, а внешний сервис — временно не отвечать. Если не обрабатывать подобные ситуации, программа завершится аварийно.

В Python для работы с ошибками используется механизм исключений (Exceptions).

В этой статье разберем основные конструкции для обработки ошибок и рассмотрим практические примеры.

Что такое исключение

Исключение — это объект, который сообщает программе о возникшей ошибке.

Например:

number = int("hello")

Результат:

ValueError: invalid literal for int()

Python не может преобразовать строку "hello" в число и выбрасывает исключение ValueError.

Конструкция try и except

Для обработки ошибок используются блоки try и except.

try:
    number = int(input("Введите число: "))
except ValueError:
    print("Нужно ввести число")

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

Обработка нескольких исключений

Можно обрабатывать разные ошибки отдельно.

try:
    result = 10 / number
except ZeroDivisionError:
    print("Деление на ноль запрещено")
except NameError:
    print("Переменная не определена")

Такой подход помогает точнее реагировать на различные проблемы.

Получение информации об ошибке

Иногда полезно узнать текст исключения.

try:
    number = int("hello")
except ValueError as error:
    print(error)

Результат:

invalid literal for int() with base 10: 'hello'

Использование else

Блок else выполняется только в том случае, если ошибок не возникло.

try:
    number = int(input("Введите число: "))
except ValueError:
    print("Ошибка ввода")
else:
    print("Вы ввели:", number)

Это помогает разделить код обработки ошибок и основной сценарий выполнения.

Использование finally

Блок finally выполняется всегда.

try:
    file = open("data.txt")
except FileNotFoundError:
    print("Файл не найден")
finally:
    print("Операция завершена")

Даже если возникнет исключение, код внутри finally будет выполнен.

Чаще всего он используется для освобождения ресурсов.

Перехват всех исключений

Иногда можно использовать базовый класс Exception.

try:
    do_something()
except Exception as error:
    print(error)

Однако злоупотреблять таким подходом не стоит. Лучше обрабатывать конкретные типы ошибок.

Генерация собственных исключений

Программа может создавать исключения самостоятельно.

age = -5

if age < 0:
    raise ValueError("Возраст не может быть отрицательным")

Оператор raise позволяет явно сообщить об ошибочной ситуации.

Создание собственного исключения

В крупных проектах часто используются собственные классы исключений.

class InvalidAgeError(Exception):
    pass

Использование:

age = -5

if age < 0:
    raise InvalidAgeError("Некорректный возраст")

Такой подход делает код более понятным и удобным для поддержки.

Практический пример

Предположим, необходимо запросить у пользователя число.

while True:
    try:
        number = int(input("Введите число: "))
        break
    except ValueError:
        print("Ошибка. Попробуйте снова.")

print("Вы ввели:", number)

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

Типичные ошибки начинающих

Пустой except

Плохая практика:

try:
    do_something()
except:
    pass

Такой код скрывает реальные проблемы.

Перехват слишком широких исключений

Не стоит использовать:

except Exception:

если известен конкретный тип ошибки.

Игнорирование ошибок

Ошибка должна либо обрабатываться, либо логироваться.

Заключение

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

При изучении Python важно освоить конструкции try, except, else, finally и raise, поскольку они используются практически в каждом серьезном проекте.

Комментарии

Пока нет комментариев