
Шаг 5. Конструкция try-except
Баллов за прохождение: 1
Конструкция try-except
В Python конструкция try-except используется для обработки исключений. Она позволяет вашей программе продолжать выполнение в случае, если возникает ошибка, и, что самое главное, позволяет нам самим выбирать, как программа будет реагировать на исключения.
Traceback
Когда в коде возникает исключение, Python выдает сообщение об исключении и так называемую трассировку.
Трассировка показывает, в какой точке вашей программы произошло исключение, разберем на примере
division = 35 // 0
print(division)
В данном коде я специально вызову исключение ZeroDivisionError, что означает ошибку деления на ноль
Трассировка выглядит следующим образом
Она показывает нам путь до файла, в котором произошла ошибка, строчку, и сам код с ошибкой. Далее ниже идет тип самого исключения, у нас это ZeroDivisionError, и пояснение исключения.
Важно! Разработчики Python хорошо постарались, дабы сообщения об ошибках были максимально понятны, не бойтесь проверять код и искать информацию в интернете при возникновении ошибок: особенно на первых порах, решение вашей проблемы будет лежать "на поверхности"
try-except
Обработка исключений нужна в первую очередь для безопасности, так как данные трассировки могут содержать секретную информацию, которую не должен видеть пользователь. Так же она нужна для упрощения взаимодействия пользователя и программы, так как обычный пользователь может просто не понять, почему случилась ошибка
Для демонстрации того, как работает try-except возьмем код из предыдущего раздела про трассировку и обработаем исключение
try:
# Код, который может вызвать исключение
division = 35 // 0
print(division)
except ZeroDivisionError:
# Код, выполняющийся в случае, если исключение возникло
print('Деление на ноль невозможно!')
В блок try помещается код, который может вызвать исключение, а в блок except помещается код, который выполняется в случае если исключение возникло, в нашем случае выводит сообщение, понятное юзеру
Также можно использовать несколько блоков except для обработки разных типов исключений:
try:
# Код, который может вызвать исключение
result = int("abc")
except ValueError:
# Обработка ошибки преобразования строки в число
print("Неверный формат числа.")
except ZeroDivisionError:
# Обработка ошибки деления на ноль
print("Деление на ноль невозможно.")
try-except-else
Блок else используется для случаев, когда исключения не возникло. В него помещается код, который срабатывает при работе программы без ошибок.
try:
division = 4 // 2
except ZeroDivisionError:
print("Деление на ноль невозможно.")
else:
print(f'Результат: {division}')
try-except-finally
Блок finally выполнится в любом случае, независимо от того, произошло ли исключение или нет. Это удобно для освобождения ресурсов, таких как закрытие файлов или сетевых соединений.
try:
file = open("example.txt", "r")
content = file.read()
except FileNotFoundError:
print("Файл не найден.")
finally:
file.close()
print("Файл закрыт.")