Привет! Ты наверняка уже видел ошибки в Python. Программа падает, появляется красный текст в терминале. Это исключения. Они возникают, когда что-то идёт не так.
Но вместо того чтобы бояться ошибок, давай научимся их контролировать.
В этой статье мы разберём:
- Что такое исключения
- Почему они возникают
- Зачем их обрабатывать
- Как они помогают делать код надёжным
- Что нужно знать перед началом
- Основная часть
- Что такое исключение
- Почему возникают исключения
- Что происходит без обработки
- Зачем обрабатывать исключения
- Виды исключений
- Примеры из реальной жизни
- Конструкция try-except
- Задачи для закрепления
- Нюансы и подводные камни
- Исключения — это не ошибки в синтаксисе
- Все исключения — наследники Exception
- Обработка всех исключений — плохая практика
- Частые ошибки и как их избежать
- Ошибка 1: Игнорирование ошибок
- Ошибка 2: Слишком широкий перехват
- Ошибка 3: Неправильное имя исключения
- Шпаргалка
- Заключение / Выводы
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Python
- Базовое понимание переменных и функций
Совет: Исключения — это не враги, а помощники. Они говорят, что в программе что-то пошло не так.
Основная часть
Что такое исключение
Исключение — это событие, которое происходит во время выполнения программы, когда возникает ошибка. Если исключение не обработано, программа останавливается.
Примеры ошибок:
# Деление на ноль
print(10 / 0) # ZeroDivisionError
# Неправильное преобразование типа
int("hello") # ValueError
# Открытие несуществующего файла
open("file.txt") # FileNotFoundErrorПочему возникают исключения
Исключения возникают по разным причинам:
| Причина | Пример |
|---|---|
| Ошибки в коде | Деление на ноль, выход за границы списка |
| Неправильные данные | Ввод пользователем букв вместо чисел |
| Внешние факторы | Отсутствие файла, проблемы с сетью |
| Неправильное использование функций | Передача аргументов не того типа |
Что происходит без обработки
Если исключение не обработано:
- Программа сразу останавливается
- Пользователь видит красный текст с ошибкой
- Код после ошибки не выполняется
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 — основная конструкция для обработки








