print "Ошибка"
В этом примере берутся числа из двух файлов и делятся одно на другое. В результате этих нехитрых действий может возникнуть несколько исключительных ситуаций, некоторые из них отмечены в частях except
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
• объекты, которые можно вызвать:
○ функции (пользовательские и встроенные);
○ функции–генераторы;
○ методы (пользовательские и встроенные);
○ классы (новые и «классические»);
○ экземпляры классов (если имеют метод __call__
• модули;
• классы (см. выше);
• экземпляры классов (см. выше);
• файлы file;
• вспомогательные типы buffer
slice
.Узнать тип любого объекта можно с помощью встроенной функции type()
Тип int и long