Что такое исключение в Python и зачем их обрабатывать

Что такое исключение в Python и зачем их обрабатывать Обработка исключений

Привет! Ты наверняка уже видел ошибки в Python. Программа падает, появляется красный текст в терминале. Это исключения. Они возникают, когда что-то идёт не так.

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

В этой статье мы разберём:

  • Что такое исключения
  • Почему они возникают
  • Зачем их обрабатывать
  • Как они помогают делать код надёжным

Что нужно знать перед началом

Для этого урока тебе понадобится:

  • Установленный Python
  • Базовое понимание переменных и функций

Совет: Исключения — это не враги, а помощники. Они говорят, что в программе что-то пошло не так.

Основная часть

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

Исключение — это событие, которое происходит во время выполнения программы, когда возникает ошибка. Если исключение не обработано, программа останавливается.

Примеры ошибок:

# Деление на ноль
print(10 / 0)   # ZeroDivisionError

# Неправильное преобразование типа
int("hello")    # ValueError

# Открытие несуществующего файла
open("file.txt")   # FileNotFoundError

Почему возникают исключения

Исключения возникают по разным причинам:

ПричинаПример
Ошибки в кодеДеление на ноль, выход за границы списка
Неправильные данныеВвод пользователем букв вместо чисел
Внешние факторыОтсутствие файла, проблемы с сетью
Неправильное использование функцийПередача аргументов не того типа

Что происходит без обработки

Если исключение не обработано:

  1. Программа сразу останавливается
  2. Пользователь видит красный текст с ошибкой
  3. Код после ошибки не выполняется
print("Начало программы")
print(10 / 0)   # Ошибка здесь
print("Конец программы")   # Не выполнится

Зачем обрабатывать исключения

Обработка исключений даёт преимущества:

1. Программа не падает

try:
    print(10 / 0)
except ZeroDivisionError:
    print("Ошибка: деление на ноль")
print("Программа продолжает работу")

2. Удобство для пользователя

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

3. Логирование ошибок

Можно записывать ошибки в файл для отладки.

4. Восстановление после ошибки

Например, если не удалось открыть файл, можно использовать настройки по умолчанию.

Виды исключений

Наиболее частые исключения:

ИсключениеПочему возникает
ZeroDivisionErrorДеление на ноль
TypeErrorОперация с несовместимыми типами
ValueErrorНеправильное значение
FileNotFoundErrorФайл не найден
KeyErrorОтсутствует ключ в словаре
IndexErrorВыход за границы списка
NameErrorПеременная не определена
AttributeErrorУ объекта нет такого метода

Примеры из реальной жизни

Пример 1. Деление на ноль:

def safe_divide(a, b):
    if b == 0:
        return "Ошибка: деление на ноль"
    return a / b

print(safe_divide(10, 2))   # 5.0
print(safe_divide(10, 0))   # Ошибка: деление на ноль

Пример 2. Работа с файлом:

try:
    with open("settings.txt", "r") as file:
        data = file.read()
except FileNotFoundError:
    print("Файл не найден, используются настройки по умолчанию")
    data = ""

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

Базовый синтаксис:

try:
    # код, который может вызвать ошибку
    result = 10 / 0
except ZeroDivisionError:
    # код, который выполнится при ошибке
    print("Ошибка: деление на ноль")

Задачи для закрепления

Задача 1. Напиши программу, которая делит два числа и обрабатывает ошибку деления на ноль.

Задача 2. Напиши программу, которая открывает файл и обрабатывает ошибку FileNotFoundError.

Задача 3. Напиши программу, которая преобразует строку в число и обрабатывает ValueError.

Задача 4. Что произойдёт, если не обработать деление на ноль?

Задача 5. Какой тип исключения возникает при обращении к несуществующему ключу в словаре?

Ответы:

Задача 1.

def divide(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        return "Ошибка: деление на ноль"

print(divide(10, 2))   # 5.0
print(divide(10, 0))   # Ошибка: деление на ноль

Задача 2.

try:
    with open("file.txt", "r") as file:
        content = file.read()
except FileNotFoundError:
    print("Файл не найден")
    content = ""

Задача 3.

def to_int(value):
    try:
        return int(value)
    except ValueError:
        return None

print(to_int("123"))   # 123
print(to_int("abc"))   # None

Задача 4.

# Программа остановится (ошибка ZeroDivisionError)

Задача 5.

# KeyError

Нюансы и подводные камни

Исключения — это не ошибки в синтаксисе

  • SyntaxError — ошибка в синтаксисе, возникает до выполнения программы
  • Исключения — возникают во время выполнения
# SyntaxError (неправильный синтаксис)
# print("Hello"   # Ошибка до запуска

# Exception (ошибка времени выполнения)
print(10 / 0)   # ZeroDivisionError

Все исключения — наследники Exception

try:
    print(10 / 0)
except Exception:
    print("Какая-то ошибка")
# Перехватывает любые исключения

Обработка всех исключений — плохая практика

try:
    value = int(input())
except Exception:   # Плохо!
    print("Ошибка")

Лучше обрабатывать конкретные исключения.

Частые ошибки и как их избежать

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

try:
    result = 10 / 0
except:
    pass   # Игнорируем ошибку

Всегда логируй или выводи сообщение об ошибке.

Ошибка 2: Слишком широкий перехват

try:
    value = int(input())
except Exception:
    print("Ошибка")   # Непонятно, что за ошибка

Перехватывай конкретные исключения.

Ошибка 3: Неправильное имя исключения

try:
    result = 10 / 0
except ZeroDivision:
    print("Ошибка")   # Правильно: ZeroDivisionError

Шпаргалка

Что нужноКак пишется
Обработать конкретное исключениеexcept ZeroDivisionError:
Обработать несколько исключенийexcept (ValueError, TypeError):
Обработать любое исключениеexcept Exception:
Получить текст ошибкиexcept Exception as e:

Заключение / Выводы

Сегодня мы узнали:

  • Исключение — ошибка времени выполнения
  • Обработка — предотвращает падение программы
  • Виды — ZeroDivisionError, ValueError, FileNotFoundError и др.
  • try-except — основная конструкция для обработки

КВИЗ

Что дальше?

Оцените статью
IMI-DS - PYTHON LERNEN
Содержание
Оглавление ×