Привет! Мы уже изучили конструкцию try-except и знаем, что она перехватывает ошибки. Но что, если код выполнился без ошибок? Как выполнить код только в этом случае?
Именно для этого существует блок else.
В этой статье мы разберём:
- Синтаксис
try-except-else - Когда выполняется
else - Зачем нужен
else - Отличие
elseотfinally
- Что нужно знать перед началом
- Основная часть
- Синтаксис try-except-else
- Простой пример
- Зачем нужен else
- else vs finally
- Пример с файлом
- Пример с несколькими except
- Когда else не нужен
- Примеры из реальной жизни
- Задачи для закрепления
- Нюансы и подводные камни
- Ошибки в else не обрабатываются
- Порядок блоков
- else не обязателен
- Частые ошибки и как их избежать
- Ошибка 1: Путаница else в try и else в if
- Ошибка 2: Неправильный порядок
- Шпаргалка
- Заключение / Выводы
- КВИЗ
- Что дальше?
Что нужно знать перед началом
Для этого урока тебе понадобится:
- Установленный Python
- Базовое понимание
try-except(статьи 1–3 в этом подменю)
Совет:
elseделает код чище и логичнее, отделяя «нормальный» код от «аварийного».
Основная часть
Синтаксис try-except-else
try:
# Код, который может вызвать ошибку
number = int(input("Введите число: "))
except ValueError:
# Код, который выполнится при ошибке
print("Ошибка: нужно ввести число")
else:
# Код, который выполнится, если ошибки НЕ было
print(f"Вы ввели: {number}")Как это работает:
- Выполняется код в
try - Если ошибка — переходим в
except - Если ошибки нет — выполняем
else
Простой пример
def safe_divide(a, b):
try:
result = a / b
except ZeroDivisionError:
print("Ошибка: деление на ноль")
else:
print(f"Результат: {result}")
return result
safe_divide(10, 2) # Результат: 5.0
safe_divide(10, 0) # Ошибка: деление на нольЗачем нужен else
else отделяет код, который должен выполниться только при успехе.
Без else (код в try):
try:
number = int(input("Введите число: "))
print(f"Вы ввели: {number}")
except ValueError:
print("Ошибка: нужно ввести число")С else:
try:
number = int(input("Введите число: "))
except ValueError:
print("Ошибка: нужно ввести число")
else:
print(f"Вы ввели: {number}")Совет:
elseделает код чище, отделяя «нормальную» логику от «аварийной».
else vs finally
| Блок | Когда выполняется |
|---|---|
else | Только если ошибки НЕ было |
finally | Всегда |
try:
number = int(input("Введите число: "))
except ValueError:
print("Ошибка")
else:
print("Успешно")
finally:
print("Это всегда")Пример с файлом
def read_file(filename):
try:
with open(filename, "r") as file:
data = file.read()
except FileNotFoundError:
print("Файл не найден")
return None
else:
print("Файл успешно прочитан")
return data
content = read_file("data.txt")
print(content)Пример с несколькими except
try:
value = int(input("Введите число: "))
result = 10 / value
except ValueError:
print("Ошибка: нужно ввести число")
except ZeroDivisionError:
print("Ошибка: деление на ноль")
else:
print(f"Результат: {result}")Когда else не нужен
Если в try нет кода, который должен выполняться только при успехе, else не нужен.
# Плохо
try:
result = 10 / 2
except ZeroDivisionError:
print("Ошибка")
else:
print(result) # Можно вынести в try
# Хорошо
try:
result = 10 / 2
print(result)
except ZeroDivisionError:
print("Ошибка")Примеры из реальной жизни
Пример 1. Работа с БД:
try:
connection = connect_to_db()
except ConnectionError:
print("Не удалось подключиться к БД")
else:
print("Подключение успешно")
query = connection.execute("SELECT * FROM users")Пример 2. Обработка данных из файла:
def process_data(filename):
try:
with open(filename, "r") as file:
lines = file.readlines()
except FileNotFoundError:
print("Файл не найден")
return
else:
print(f"Обработка {len(lines)} строк")
for line in lines:
process_line(line)Задачи для закрепления
Задача 1. Напиши программу, которая преобразует строку в число. При успехе выведи «Преобразование успешно», при ошибке — «Ошибка».
Задача 2. Напиши программу, которая открывает файл. При успехе выведи «Файл открыт», при ошибке — «Файл не найден».
Задача 3. В чём разница между else и finally?
Задача 4. Напиши функцию, которая делит два числа. При успехе выводит результат, при ошибке — сообщение об ошибке.
Задача 5. Когда выполняется блок else в try-except?
Ответы:
Задача 1.
try:
num = int(input("Введите число: "))
except ValueError:
print("Ошибка")
else:
print("Преобразование успешно")
print(f"Число: {num}")Задача 2.
try:
with open("file.txt", "r") as file:
content = file.read()
except FileNotFoundError:
print("Файл не найден")
else:
print("Файл открыт")Задача 3.
# else — выполняется только при успехе
# finally — выполняется всегда
Задача 4.
def safe_divide(a, b):
try:
result = a / b
except ZeroDivisionError:
print("Ошибка: деление на ноль")
else:
print(f"Результат: {result}")
return resultЗадача 5.
# Блок else выполняется, если в блоке try не было ошибокНюансы и подводные камни
Ошибки в else не обрабатываются
try:
result = 10 / 2
except ZeroDivisionError:
print("Ошибка")
else:
result = 1 / 0 # Ошибка не обрабатывается!Если код в else может вызвать ошибку — оберни его в отдельный try.
Порядок блоков
try:
# код
except:
# код
else:
# код
finally:
# кодelse не обязателен
try:
result = 10 / 2
except ZeroDivisionError:
print("Ошибка")
# else не нуженЧастые ошибки и как их избежать
Ошибка 1: Путаница else в try и else в if
if x > 0:
print("Положительное")
else:
print("Не положительное")
try:
result = 10 / x
except ZeroDivisionError:
print("Ошибка")
else: # Это другой else!
print("Успех")Ошибка 2: Неправильный порядок
try:
# код
else: # Ошибка! else должен идти после except
# код
except:
# кодШпаргалка
| Что нужно | Как пишется |
|---|---|
| Блок при успехе | else: |
| Блок всегда | finally: |
| Порядок блоков | try → except → else → finally |
Заключение / Выводы
Сегодня мы узнали:
- Блок
elseвыполняется при успехе - Отличие
elseотfinally elseделает код чище- Правильный порядок блоков






