Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [ 55 ] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

Глава 13

Встроенные классы исключений

Исключения в языке Python могут быть экземплярами классов и строками. Поддержка строк в качестве исключений оставлена для совместимости с ранними версиями и может быть удалена в будущем. Классы встроенных исключений определены в стандартном модуле exceptions. Нет необходимости явно импортировать этот модуль - все определенные в нем классы исключений всегда доступны аналогично другим встроенным объектам (определены в пространстве встроенных имен).

Если в ветви except инструкции try указывается объект-класс C, эта ветвь будет обрабатывать любое "совместимое" с указанным классом исключение, то есть если оно является экземпляром C или производного от него класса. Например, ветвь except ValueError: будет обрабатывать исключения UnicodeError1, но except UnicodeError: не будет перехватывать исключения ValueError. Два класса исключений, ни один из которых не является производным (прямо или косвенно) от другого, никогда не будут эквивалентными, даже если они имеют одинаковое имя (под именем исключения подразумевается имя класса, то есть значение атрибута name объекта-класса).

Описанные ниже встроенные исключения генерируются интерпретатором, встроенными функциями и методами объектов встроенных типов. Исключения могут иметь ассоциированное с ним значение (аргумент или несколько аргументов, используемые при его инициализации), описывающее причину возникновения исключительной ситуации. Если класс исключения является производным от стандартного класса Exception, аргументы, используемые при инициализации, сохраняются в атрибуте args.

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

Ниже приведена иерархия встроенных классов исключений.

Exception

Базовый класс для всех встроенных классов исключений. Рекомендуется также использовать его для всех пользовательских классов исключений. Атрибут args его

1 Здесь и далее под "исключениями SomeError" или "исключениями типа SomeError" подразумеваются "исключения, являющиеся экземплярами класса SomeError", если речь идет о генерируемом исключении, и "исключения, являющиеся экземплярами SomeError и производных от него классов", если речь идет о перехватываемом исключении.



экземпляров содержит список аргументов, которые использовались при его инициализации. Встроенная функция str() , при применении к экземплярам класса Exception, возвращает строковое значение аргумента (если при инициализации использовался один аргумент), кортежа аргументов (если при инициализации использовалось более одного аргумента) или пустую строку (если конструктор вызывался без аргументов). Кроме того, Вы можете получить доступ (только для чтения) к аргументам, используя операцию получения элемента по индексу (exc[ i ] ).

StandardError

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

ArithmeticError

Базовый класс исключений, генерируемых при возникновении арифметических ошибок.

FloatingPointError

Исключения этого класса генерируются, если возникают проблемы с выполнением операции с плавающей точкой (могут генерироваться только если Python сконфигурирован с опцией --with-fpectl или в файле config.h определено имя WANT SIGFPE HANDLEr).

OverflowError

Используется, когда результат арифметической операции слишком большой, чтобы его можно было представить в рамках используемого типа. Заметим, что этого не может произойти при использовании длинного целого типа (long int) - скорее будет сгенерировано исключение MemoryError. Из-за того, что обработка ошибок при операциях с плавающей точкой в языке C не стандартизована, большинство таких операций не проверяются. Для обычных целых чисел (int), все операции, которые могут привести к переполнению, проверяются, за исключением сдвига влево, так как в этом случае потеря старших бит считается предпочтительнее генерации исключения.

ZeroDivisionError

Используется, если второй операнд операторов деления и получения остатка от деления равен нулю.

AssertionError

Исключения этого класса генерируются, если не выполняется условие, указанное в инструкции assert.

AttributeError

Исключения этого класса генерируются в случаях, когда невозможно получить значение атрибута с определенным именем, удалить его или присвоить ему новое значение. Если объекты данного типа вообще не поддерживают используемый доступ к атрибутам (получение значения, удаление или присваивание), генерируется исключение TypeError.

EOFError

Исключения этого класса генерируются некоторыми встроенными функциями (input(), raw input()), если достигается конец файла и, при этом, из него не считано ни байта информации. Обратите внимание на то,



2На самом деле, поведение зависит от используемой платформы. Например, под Windows NT при прерывании в момент работы функций input() и raw input() сначала будет сгенерировано исключение EOFError.

что методы read() и readline() файловых объектов при достижении конца файла возвращают пустую строку.

EnvironmentError

Базовый класс исключений, генерируемых при ошибках, возникающих за пределами интерпретатора Python. Если при инициализации исключений этого типа используются 2 или 3 аргумента, первый из них считается кодом ошибки, второй - строкой, поясняющей причину ее возникновения, и третий (необязательный) - имя файла, с которым связана возникшая ошибка. В этом случае аргументы (помимо унаследованного атрибута args) сохраняются соответственно в атрибутах errno, strerror и filename и используются для создания строкового представления (функция str())ввиде [Errno errno] strerror или [Errno errno] strerror: filename. lOError

Используется при ошибках ввода/вывода, например, если не найден файл с указанным именем или на носителе нет свободного места.

OSError

Исключения этого класса (доступного также как os.error) в основном генерируются функциями модуля os.

WindowsError

Используется при ошибках, специфичных для операционных систем Windows или код ошибки не соответствует значению errno. Значения атрибутов errno и strerror создаются из значений, возвращаемых функциями Windows API GetLastError() и FormatMessage() соответственно. Добавлен в версии 1.6.

ImportError

Исключения этого класса генерируются, если модуль с указанным в инструкции import именем не может быть импортирован или в модуле не найдено имя, указанное в инструкции from ... import ....

KeyboardInterrupt

По умолчанию, если интерпретатор получает сигнал SIGINT, например, при прерывании с клавиатуры (обычно клавишами Ctrl-C), генерируется исключение Keyboardlnterrupt. Вы можете изменить реакцию на сигнал SIGINT, воспользовавшись функцией signal.signal(). Прерывание в момент ожидания ввода, при использовании функций input() и raw input() , а также методов read() , readline() и readlines() файлового объекта, представляющего устройство tty, также генерируется исключение KeyboardInterrupt2.

LookupError

Базовый класс исключений, генерируемых, если последовательность или отображение не содержит элемента с заданным индексом или ключом. Может быть сгенерировано напрямую функцией sys.setdefaultencodingO .



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [ 55 ] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145