Исключения в Python – события, нарушающие обычный поток выполнения программы. Они могут привести к аварийному завершению программы, если не обработаны должным образом. Конструкция try-except позволяет обрабатывать исключения, предотвращая подобные сбои.
Что такое исключения?
Исключение возникает при непредвиденных событиях, например, делении на ноль. Пример:
10 / 0
Выполнение этой строки кода приведёт к ошибке ZeroDivisionError. Программа завершится с сообщением об ошибке. Без обработки исключений программа может зависнуть или закрыться.
Конструкция try-except
Конструкция try-except перехватывает и обрабатывает исключения, предотвращая аварийное завершение программы.
try:
x = int(input())
y = int(input())
s = x / y
print(s)
except ZeroDivisionError:
print("Деление на ноль недопустимо!")
s = 0
print(s)
Блок try содержит код, который может вызвать исключение (ZeroDivisionError). Если исключение возникает, выполнение блока try прерывается, и управление передаётся блоку except. Блок except содержит код для обработки исключения. При делении на ноль выводится сообщение об ошибке, переменной s присваивается значение 0, и программа продолжает работу.
Идентификация и обработка исключений
Для успешной обработки исключений необходимо знать их названия. Названия ошибок выводятся в консоли или терминале при возникновении ошибки.
Примеры исключений:
- ValueError: возникает при попытке преобразовать строку, не являющуюся числом, в число. Например: int("abc").
- TypeError: возникает при попытке выполнить операцию с несовместимыми типами данных. Например: 2 + "1".
- ZeroDivisionError: возникает при делении на ноль.
Расширенная обработка: несколько блоков except
Пользовательский ввод может содержать не только числа. Для более надёжной программы следует добавить обработку дополнительных исключений:
try:
x = int(input())
y = int(input())
s = x / y
print(s)
except ZeroDivisionError:
print("Деление на ноль!")
s = 0
print(s)
except ValueError:
print("Вы ввели не число!")
x = 0
y = 0
s = 0
Этот пример обрабатывает ValueError, возникающий при вводе нечисловых данных.
Блоки else и finally
Помимо try и except, существуют блоки else и finally.
- else: выполняется, если в блоке try не произошло исключений.
- finally: выполняется всегда, независимо от возникновения исключения.
try:
x = int(input())
y = int(input())
s = x / y
except ZeroDivisionError:
print("Деление на ноль!")
s = 0
except ValueError:
print("Вы ввели не число!")
x = 0
y = 0
s = 0
else:
print("Все верно")
finally:
print("Выполнение завершено")
Блок else выведет «Все верно» при успешном делении, а finally всегда выведет «Выполнение завершено».
Обработка исключений с помощью try-except важна для написания надёжных программ на Python. Она предотвращает аварийные завершения и обеспечивает корректное взаимодействие с пользователем, предоставляя информативные сообщения об ошибках. Для эффективной обработки необходимо уметь идентифицировать исключения по их именам.