В этой главе речь пойдет об обработке ошибок (исключений) в Python. Рассмотрим пример:
Выполним его и убедимся, что перевод буквы в число и деление на нуль приводят к ошибкам:
Возникают два извечных вопроса: кто виноват и что делать?
Можно осуществить прямую проверку вводимого с клавиатуры значения:
Программа работает и на нуль не делит:
Python предлагает другой способ, основанный на перехвате ошибок (исключений).
Перепишем наш пример с учетом возможностей Python:
Выполним программу:
В блок try помещается код, в котором может произойти ошибка. В случае возникновения ошибки (исключения) управление передается в блок except. Запустим программу и увидим, что при возникновении ошибки перевода буквы в число, мы снова попадаем в блок except:
Дело в том, что except без указания типа перехватываемой ошибки (исключения) обрабатывает все виды ошибок. Как нам отделить ошибки деления на нуль и преобразования типов? Перейдем в интерактивный режим Python и выполним несколько команд, приводящих к ошибкам (исключениям):
При делении на нуль возникает ошибка ZeroDivisionError, а при преобразовании типов – ValueError.
Воспользуемся этим знанием и перепишем нашу программу:
Выполним программу и убедимся, что теперь срабатывают различные блоки except в зависимости от типа возникающих ошибок (исключений):
Инструкция обработки исключений имеет несколько дополнительных возможностей. Рассмотрим их на примере:
Запустим программу для различных входных значений
Отмечу только, что информацию об исключении можно помещать в переменную (с помощью инструкции as) и выводить на экран с помощью функции print.
Перехват исключений используется при написании функций, например:
Результат выполнения: