Обработка исключений
Подписаться на эту рубрику по RSS
Все встроенные исключения в языке Python представлены в виде классов. Иерархия встроенных классов исключений показана в листинге ниже.
Иерархия встроенных классов исключений
BaseException GeneratorExit (в Python 2.6 и выше) KeyboardInterrupt SystemExit Exception GeneratorExit (в Python 2.5) StopIteration Warning BytesWarning (в Python 2.6 и выше) DeprecationWarning, FutureWarning, ImportWarning PendingDeprecationWarning, RuntimeWarning, SyntaxWarning UnicodeWarning, UserWarning StandardError ArithmeticError FloatingPointError, OverflowError, ZeroDivisionError AssertionError AttributeError BufferError (в Python 2.6) EnvironmentError IOError OSError WindowsError EOFError ImportError LookupError IndexError, KeyError MemoryError NameError UnboundLocalError ReferenceError RuntimeError NotImplementedError SyntaxError IndentationError TabError SystemError TypeError ValueError UnicodeError UnicodeDecodeError, UnicodeEncodeError UnicodeTranslateError
Основное преимущество использования классов для обработки исключений заключается в возможности указания базового класса для перехвата всех исключений соответствующих классов-потомков. Например, для перехвата деления на ноль мы использовали класс ZeroDivisionError. Если вместо этого класса указать базовый класс ArithmeticError, то будут перехватываться исключения классов FloatingPointError, OverflowError и ZeroDivisionError. Пример:
Начиная с версии 2.6, язык Python поддерживает протокол менеджеров контекста. Этот протокол гарантирует выполнение завершающих действий (например, закрытие файла) вне зависимости от того, произошло исключение внутри блока кода или нет. Необходимо заметить, что в Python 2.5 также можно использовать протокол, предварительно указав выражения (в Python 2.6 и выше это выражение указывать не нужно).
from __future__ import with_statement
Для работы с протоколом предназначения инструкции with ... as. Инструкция имеет следующий формат:
with <Выражение>[ as <Переменная>]: <Блок, в котором перехватываем исключения>Далее...
Исключения - это извещения интерпретатора, возбуждаемые в случае возникновения ошибок в программном коде или при наступлении какого-либо события. Если в коде не предусмотрена обработка исключения, то программа прерывается и выводит сообщение об ошибке.
Существует три типа ошибок в программе:
Синтаксические - это ошибка в имени оператора или функции, отсутствие закрывающей или открывающей кавычек и т.д., т.е. ошибки в синтаксисе языка. Как правило, интерпретатор предупредит о наличии ошибки, а программа не будет выполняться совсем. Пример синтаксической ошибки.
>>> print "Нет завершающей кавычки!
SyntaxError: EOL while scanning string literal
Логические - это ошибка в логике работы программы, которые можно выявить только по результатам работы скрипта. Как правило, интерпретатор не предупреждает о наличии ошибки. А программа будет выполняться, т.к. не содержит синтаксических ошибок. Такие ошибки достаточно трудно выявить и исправить.