ГЛАВА 12. ОБРАБОТКА ИСКЛЮЧЕНИЙ В PYTHON

В этой главе речь пойдет об обработке ошибок (исключений) в Python. Рассмотрим пример:

Выполним его и убедимся, что перевод буквы в число и деление на нуль приводят к ошибкам:

Возникают два извечных вопроса: кто виноват и что делать?

Можно осуществить прямую проверку вводимого с клавиатуры значения:

Программа работает и на нуль не делит:

Python предлагает другой способ, основанный на перехвате ошибок (исключений).

Перепишем наш пример с учетом возможностей Python:

Выполним программу:

В блок try помещается код, в котором может произойти ошибка. В случае возникновения ошибки (исключения) управление передается в блок except. Запустим программу и увидим, что при возникновении ошибки перевода буквы в число, мы снова попадаем в блок except:

Дело в том, что except без указания типа перехватываемой ошибки (исключения) обрабатывает все виды ошибок. Как нам отделить ошибки деления на нуль и преобразования типов? Перейдем в интерактивный режим Python и выполним несколько команд, приводящих к ошибкам (исключениям):

При делении на нуль возникает ошибка ZeroDivisionError, а при преобразовании типов – ValueError.

Воспользуемся этим знанием и перепишем нашу программу:

Выполним программу и убедимся, что теперь срабатывают различные блоки except в зависимости от типа возникающих ошибок (исключений):

Инструкция обработки исключений имеет несколько дополнительных возможностей. Рассмотрим их на примере:

Запустим программу для различных входных значений

Отмечу только, что информацию об исключении можно помещать в переменную (с помощью инструкции as) и выводить на экран с помощью функции print.

Перехват исключений используется при написании функций, например:

Результат выполнения: