Язык программирования Python - страница 4

Шрифт
Интервал

стр.

. Лучше всего пояснить синтаксис оператора >try–except следующим примером:

>try:

> res = int(open('a.txt').read())/int(open('c.txt').read())

> print res

>except IOError:

> print "Ошибка ввода–вывода"

>except ZeroDivisionError:

> print "Деление на 0"

>except KeyboardInterrupt:

> print "Прерывание с клавиатуры"

>except:

> print "Ошибка"

В этом примере берутся числа из двух файлов и делятся одно на другое. В результате этих нехитрых действий может возникнуть несколько исключительных ситуаций, некоторые из них отмечены в частях >except (здесь использованы стандартные встроенные исключения Python). Последняя часть >except в этом примере улавливает все другие исключения, которые не были пойманы выше. Например, если хотя бы в одном из файлов находится нечисловое значение, функция >int() возбудит исключение >ValueError. Его–то и сможет отловить последняя часть >except. Разумеется, выполнение части >try в случае возникновения ошибки уже не продолжается после выполнения одной из частей >except.

В отличие от других языков программирования, в Python исключения нередко служат для упрощения алгоритмов. Записывая оператор >try–except, программист может думать так: «попробую, а если сорвется — выполнится код в >except». Особенно часто это используется для выражений, в которых значение получается по ключу из отображения:

>try:

> value = dict[key]

>except:

> value = default_value

Вместо

>if dict.has_key(key):

> value = dict[key]

>else:

> value = default_value

Примечание:

Пример уже несколько устаревшей идиомы языка Python иллюстрирует только дух этого подхода: в современном Python лучше записать так >value = dict.get(key, default_value).

Исключения можно возбуждать и из программы. Для этого служит оператор >raise. Заодно следующий пример показывает канонический способ определения собственного исключения:

>class MyError(Exception):

> pass

>try:

> ...

> raise MyError, "my error 1"

> ...

>except MyError, x:

> print "Ошибка:", x

Кстати, все исключения выстроены в иерархию классов, поэтому >ZeroDivisionError может быть поймана как >ArithmeticError, если соответствующая часть >except будет идти раньше.

Для утверждений применяется специальный оператор >assert. Он возбуждает >AssertionError, если заданное в нем условие неверно. Этот оператор используют для самопроверки программы. В оптимизированном коде он не выполняется, поэтому строить на нем логику алгоритма нельзя. Пример:

>c = a + b

>assert c == a + b

Кроме описанной формы оператора, есть еще форма >try–finally для гарантированного выполнения некоторых действий при передаче управления изнутри оператора >try–finally вовне. Он может применяться для освобождения занятых ресурсов, что требует обязательного выполнения, независимо от произошедших внутри катаклизмов:

>try:

> ...

>finally:

> print "Обработка гарантированно завершена"

Смешивать вместе формы >try–except и >try–finally нельзя.

Встроенные типы данных

Как уже говорилось, все данные в Python представлены объектами. Имена являются лишь ссылками на эти объекты и не несут нагрузки по декларации типа. Значения встроенных типов имеют специальную поддержку в синтаксисе языка: можно записать литерал строки, числа, списка, кортежа, словаря (и их разновидностей). Синтаксическую же поддержку операций над встроенными типами можно легко сделать доступной и для объектов определяемых пользователей классов.

Следует также отметить, что объекты могут быть неизменчивыми и изменчивыми. Например, строки в Python являются неизменчивыми, поэтому операции над строками создают новые строки.

Карта встроенных типов (с именами функций для приведения к нужному типу и именами классов для наследования от этих типов):

• специальные типы: >None, >NotImplemented и >Ellipsis;

• числа;

 ○ целые

  • обычное целое >int

  • целое произвольной точности >long

  • логический >bool

 ○ число с плавающей точкой >float

 ○ комплексное число >complex

• последовательности;

 ○ неизменчивые:

  • строка >str;

  • Unicode–строка >unicode;

  • кортеж >tuple;

 ○ изменчивые:

  • список >list;

• отображения:

 ○ словарь >dict

• объекты, которые можно вызвать:

 ○ функции (пользовательские и встроенные);

 ○ функции–генераторы;

 ○ методы (пользовательские и встроенные);


стр.

Похожие книги