Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

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

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

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

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

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

классы (новые и «классические»);

экземпляры классов (если имеют метод __call__);

модули;

классы (см. выше);

экземпляры классов (см. выше);

файлы file;

вспомогательные типы buffer, slice.

Узнать тип любого объекта можно с помощью встроенной функции type.

Тип int и long

Два типа: int (целые числа) и long (целые произвольной точности) служат моделью для представления целых чисел. Первый соответствует типу long в компиляторе C для используемой архитектуры. Числовые литералы можно записать в системах счисления с основанием 8, 10 или 16:

Листинг

# В этих литералах записано число 10

print 10, 012, 0xA, 10L

Набор операций над числами — достаточно стандартный как по семантике, так и по обозначениям:

Листинг

>>> print 1 + 1, 3 — 2, 2*2, 7/4, 5%3

2 1 4 1 2

>>> print 2L ** 1000

107150860718626732094842504906000181056140481170553360744375038

837035105112493612249319837881569585812759467291755314682518714

528569231404359845775746985748039345677748242309854210746050623

711418779541821530464749835819412673987675591655439460770629145

71196477686542167660429831652624386837205668069376

>>> print 3 < 4 < 6, 3 >= 5, 4 == 4, 4 != 4 # сравнения

Поделиться:
Популярные книги

На границе империй. Том 5

INDIGO
5. Фортуна дама переменчивая
Фантастика:
боевая фантастика
попаданцы
7.50
рейтинг книги
На границе империй. Том 5

Я – Легенда

Гарцевич Евгений Александрович
1. Я - Легенда!
Фантастика:
боевая фантастика
попаданцы
рпг
фантастика: прочее
5.00
рейтинг книги
Я – Легенда

Сирийский рубеж 3

Дорин Михаил
7. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж 3

Отморозок 4

Поповский Андрей Владимирович
4. Отморозок
Фантастика:
попаданцы
фантастика: прочее
5.00
рейтинг книги
Отморозок 4

Князь Андер Арес 5

Грехов Тимофей
5. Андер Арес
Фантастика:
историческое фэнтези
фэнтези
героическая фантастика
5.00
рейтинг книги
Князь Андер Арес 5

Я Гордый часть 6

Машуков Тимур
6. Стальные яйца
Фантастика:
фэнтези
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я Гордый часть 6

Идеальный мир для Лекаря 21

Сапфир Олег
21. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 21

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Чужая семья генерала драконов

Инженер Петра Великого

Гросов Виктор
1. Инженер Петра Великого
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Инженер Петра Великого

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Двойник короля 19

Скабер Артемий
19. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 19

Древесный маг Орловского княжества 5

Павлов Игорь Васильевич
5. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 5

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Учитель из прошлого тысячелетия

Еслер Андрей
6. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Учитель из прошлого тысячелетия