В языке программирования 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("Файл закрыт.")