Реализация блока try-except
На предыдущем этапе вы увидели, как исключения могут привести к внезапному завершению программы. Чтобы корректно обрабатывать исключения и избежать аварийного завершения программы, можно использовать блоки try
и except
.
Блок try
позволяет заключить в себя участок кода, в котором может возникнуть исключение. Если исключение возникает внутри блока try
, программа переходит в соответствующий блок except
, где можно обработать это исключение.
Давайте модифицируем файл exceptions_example.py
, добавив в него блок try-except
для обработки исключения ZeroDivisionError
. Откройте файл exceptions_example.py
в редакторе VS Code и измените его следующим образом:
## ~/project/exceptions_example.py
def divide(x, y):
try:
result = x / y
return result
except ZeroDivisionError:
return "Cannot divide by zero!"
print(divide(10, 2))
print(divide(5, 0))
print(divide(8, 4))
В этом модифицированном коде:
- Мы добавили блок
try
вокруг операции x / y
. Это означает, что если при выполнении деления возникнет исключение ZeroDivisionError
, программа перейдёт в блок except
.
- Строка
except ZeroDivisionError:
указывает, что мы хотим обработать исключения типа ZeroDivisionError
.
- Внутри блока
except
мы возвращаем строку "Cannot divide by zero!"
. Эта строка будет выведена на консоль вместо аварийного завершения программы.
Теперь запустим модифицированный скрипт. Откройте терминал в VS Code и выполните следующую команду:
python ~/project/exceptions_example.py
Вы увидите вывод, похожий на следующий:
5.0
Cannot divide by zero!
2.0
Как вы можете видеть, программа больше не завершается аварийно при делении на ноль. Вместо этого блок except
перехватывает исключение ZeroDivisionError
, и выводится сообщение "Cannot divide by zero!"
. Затем программа продолжает выполнение, и последняя инструкция print
также выполняется успешно.
Блоки try-except
также можно использовать для обработки других типов исключений. Например, можно использовать блок try-except
для обработки исключений TypeError
, которые могут возникнуть при попытке выполнить операцию над нессовместимыми типами данных. Также можно использовать несколько блоков except
для обработки разных типов исключений.
На следующем этапе вы узнаете, как использовать pytest
для проверки на возникновение исключений.