Генераторы словарей и модули Рython
Функции в языке Python Функции в языке PythonВсе функции в языке Python возвращают какое-либо значение, хотя вполне возможно (и часто так и делается) просто игнорировать это значение. Возвращаемое значение может быть единственным значением или кортежем значений,...
Реализация генераторов Реализация генераторовМы рассмотрели коллекции-последовательности, tuple, collections, na-medtuple и list, поддерживающие, как и строки, возможность извлечения срезов. Также было рассмотрено использование оператора распаковывания...
Парсинг документов XML Парсинг документов XMLXML: Для парсинга документов XML широко используются два основных подхода. Один из них основан на анализе DOM (Document Object Model -объектная модель документа), а другой - на использовании SAX (Simple API for XML - упрощенный...
Копирование коллекций Копирование коллекцийКопирование коллекций: Поскольку в языке Python повсюду используются ссылки на объекты, когда выполняется оператор присваивания (=), никакого копирования данных на самом деле не происходит. Если справа от оператора находится литерал,...
Собственные исключения
Собственные исключения: Собственные исключения - это наши собственные типы данных (классы). Базовым классом basException должен быть либо класс Exception, либо один из его наследников. Собственные исключения нередко используются, чтобы избежать глубоко вложенных циклов. Например, допустим, что у нас имеется объект table, хранящий записи (строки), каждая из которых состоит из полей (столбцов), в каждом из которых может иметься несколько значений (элементов). Эти 15 строк программного кода осложняет тот факт, что нам пришлось предусмотреть прерывание каждого цикла в отдельности.

Этот прием позволил сократить программный код до десяти строк (или до 11, если включить определение класса исключения) и придал коду более удобочитаемый вид. Если искомый элемент будет найден, возбуждается наше собственное исключение и выполняется соответствующий блок except, при этом блок else не выполняется. Если искомый элемент не будет найден, исключение не возбуждается и тогда в конце выполняется блок else. Рассмотрим еще один пример, демонстрирующий другие способы обработки исключений.

Все фрагменты взяты из программы check-tags.py, которая читает содержимое файлов HTML, имена которых передаются в виде аргументов командной строки, и выполняет некоторые простые проверки, чтобы убедиться, что все теги начинаются с символа "" и все сущности оформлены правильно. Второе и третье исключения наследуют первое; для чего это необходимо, мы увидим, когда будем обсуждать программный код, использующий эти исключение. Функция parse , использующая эти исключения, содержит более 70 строк программного кода, поэтому мы покажем только ту часть функции, которая имеет непосредственное отношение к обработке исключений.

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

Если возникает исключение, связанное с синтаксическим анализом, оно будет перехвачено блоком except. Используя базовый класс InvalidEntityError, мы перехватим оба типа исключений - InvalidNumericEntityError и InvalidAlphaEntityError. После этого с помощью функции isinstance проверяется, какое именно исключение возникло, и определяется соответствующее сообщение об ошибке. Встроенная функция isinstance возвращает True, если первый ее аргумент имеет тот же тип, что и тип (или один из его базовых типов), переданный во втором аргументе.

Можно было бы использовать отдельные блоки except для каждого из трех наших собственных исключений синтаксического анализа, но в данном случае, объединив обработку в одном блоке, нам удалось избежать необходимости повторять четыре последние строки (от инструкции print до инструкции raise) в каждом из них. Программа имеет два режима работы. Если переменная skip_on_f irst_ error имеет значение False, программа продолжит проверку файла даже после обнаружения синтаксической ошибки, что может привести к выводу множества сообщений об ошибках для каждого файла.
Навигация: 1 2 3 4
 
 
© Copyright