Анимация
JavaScript
|
Главная Библионтека Глава 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 |