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

Если в словаре d не будет найден элемент с ключом 5, для нас было бы желательно обработать исключение КеуЕггог, а не более общее LookupError. Но в данном случае блок except с классом КеуЕггог никогда не будет выполняться. В случае возникновения исключения КеуЕггог соответствующим будет признан блок except с классом LookupError, потому что LookupError является базовым классом для КеуЕггог, то есть класс LookupError находится выше класса КеуЕггог в иерархии классов исключений.

Поэтому в случае использования нескольких блоков except необходимо всегда располагать их сверху вниз в порядке от более специализированных (расположенных ниже в иерархии) к более общим (расположенных выше в иерархии). Обратите внимание, что обычно не принято указывать класс Exception в предложении except, так как оно будет соответствовать любому исключению и легко может скрыть логические ошибки в программном коде. Возможно, в этом примере предполагалось перехватить исключение КеуЕггог, но если п имеет значение 0, то мы неумышленно перехватим и исключение ZeroDivisionError.

Этот вариант порождает те же проблемы, что и при использовании предложения except Exception, и даже еще хуже; такое предложение никогда не должно использоваться. Если интерпретатор Python не обнаружит ни одного соответствующего предложения except, он начнет подъем вверх по стеку вызовов, пытаясь отыскать подходящий обработчик исключения. Если такой обработчик не будет найден, программа завершит свою работу с выводом диагностической информации и сообщения об ошибке. Если исключение не возникло, будет выполнен необязательный блок else, если таковой имеется.

И в любом случае, то есть независимо от того, возникло ли исключение или нет, и было ли оно обработано или интерпретатору предстоит выполнить подъем по стеку вызовов, всегда выполняется блок finally, если он присутствует. Если исключение не возникло или было обработано одним из блоков except, блок finally будет выполнен самым последним, но если для возникшего исключения не было найдено соответствующего блока except, то сначала будет выполнен блок finally, и только потом интерпретатор передаст исключение вверх по стеку вызовов.
Навигация: 1 2 3 4
 
 
© Copyright