raise — это как охранник на входе, который останавливает посетителя без пропуска: «Дальше нельзя!». А finally — как уборщик, приходящий в конце смены: неважно, был аврал или спокойный день, свет он выключит и дверь закроет всегда. Эти два инструмента дают контроль: где-то мы сами поднимаем ошибку, а где-то гарантируем, что «уборка» произойдёт при любом исходе.
raise — возбудить исключение самому
Иногда нужно прервать работу с понятной ошибкой, если данные некорректны. Для этого используют raise.
▶ raise.py
as e сохраняет объектКонкретный экземпляр класса — со своими данными. Почти всё в Python является объектом.исключенияСигнал об ошибке во время выполнения. Его можно перехватить блоком try/except. в переменнуюИменованное хранилище для значения. Имя связывается со значением через присваивание: x = 5.e — из неё можно достать текст ошибки.
finally — выполнить в любом случае
Блок finally выполняется всегда: и если ошибка была, и если нет. В нём закрывают файлы, соединения, освобождают ресурсы.
▶ finally.py
📝Заметка
finally срабатывает даже если внутри try сработал return. Это гарантия, что важный код (закрытие файла, откат транзакции) выполнится при любом исходе.
💡Совет
🔮 Предскажите вывод
finally выполняется всегда — даже когда в try уже стоит return. В каком порядке напечатаются строкиТекстовое значение в кавычках: "привет". Неизменяема. По-английски string (str).?
▶ predict-finally.py
Ответ — A, затем B, затем из try. Несмотря на return "из try", Python перед фактическим выходом выполняет блок finally (печатает «B») — и только потом возвращает значение, которое печатает внешний print. Это и есть гарантия «уборки» при любом исходе.
⚠️ Частые ошибки новичков
Частая ошибка с raise — забыть скобки и текст или перепутать тип. Если написать raise ValueError без сообщения, отладка усложняется: непонятно, что именно не так. Запустите код — он поднимает ошибку без пояснения. Добавьте понятный текст в скобках.
▶ broken-raise.py
Заданиерешение.py
Напишите функцию get_item(lst, i): она возвращает lst[i], но если индекс вне диапазона — поднимает IndexError с текстом "Индекс вне диапазона". Подсказка: проверьте границы и используйте raise.
Заданиерешение.py
Доп. задача. Напишите checked_sqrt(x): если x < 0 — поднимите ValueError("Отрицательное число"), иначе верните x ** 0.5.
❓Проверь себя
Когда выполняется блок finally?
Зачем добавлять текст в raise ValueError("...")?
ℹ️Важно
✅ Что вы узнали
raise — «охранник»: сами поднимаем исключение с понятным текстом при некорректных данных.
as e сохраняет объект ошибки — из него достаётся текст.
finally — «уборщик»: выполняется всегда, даже после return в try.
В raise всегда добавляйте поясняющее сообщение — это упрощает отладку.
Комментарии
Загрузка…
Загрузка комментариев…