Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [ 19 ] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145

7.2.2 Модуль pickle

Строки легко могут быть записаны в файл и считаны из него. Числа требуют приложения небольших усилий, так как метод read() всегда возвращает строки, которые нужно обработать, например, с помощью функции int() . Однако задача сильно усложняется,

>>> f.readlinesO

[This is the first line of the file.\012,

Second line of the file\012]

f .write(s) записывает содержимое строки s в файл. >>> f.write(This is a test\n)

f .tell() возвращает текущее положение в файле в байтах, отсчитываемое от начала файла. Чтобы изменить текущее положение, используйте f .seek(offset, from what) . Новое положение вычисляется путем добавления offset к точке отсчета. Точка отсчета выбирается в зависимости от значения аргумента from what: 0 соответствует началу файла (используется по умолчанию, если метод вызывается с одним аргументом), 1 - текущему положению и 2 - концу файла.

>>> f=open(/tmp/workfile, rb+) >>> f.write(0123456789abcdef)

>>> f.seek(5) # Go to the 5th byte in the file

>>> f.read(1)

>>> f.seek(-3, 2) # Go to the 3rd byte before the end

>>> f.read(1)

После того, как Вы закончили все операции с файлом, закройте файл с помощью f .close(). При попытке использовать закрытый файл для операций чтения/записи генерируется исключение ValueError:

>>> f.closeO >>> f.readO

Traceback (innermost last):

File "<stdin>", line 1, in ? ValueError: I/O operation on closed file

Объекты-файлы имеют еще несколько методов, используемых не так часто (isatty() , truncate() ). Для получения о них полной информации смотрите раздел 11.7.



если Вы хотите сохранять более сложные типы данных, такие как списки, словари или экземпляры классов.

Чтобы пользователю не приходилось постоянно писать и отлаживать код для сохранения сложных типов данных, Python предоставляет для этих целей стандартный модуль pickle. Этот изумительный модуль позволяет получить представление почти любого объекта (даже некоторые формы кода) в виде набора байтов (строки), одинакового для всех платформ. Такой процесс называют "консервированием" (pickling). Такое представление (законсервированный объект) можно сохранить в файле или передать через сетевое соединение на другую машину. К считанному из файла или принятому на другой машине законсервированному объекту может быть применена операция восстановления (unpickling).

Если у Вас есть объект x и файловый объект f, открытый для записи, простейший способ сохранить объект потребует всего одну строку кода:

pickle.dump(x, f)

Так же просто можно восстановить объект (f - файловый объект, открытый для чтения):

x = pickle.load(f)

Для получения полного представления о возможностях модуля pickle, смотрите его описание в третьей части книги.

Использование модуля pickle является стандартным в языке Python путем сохранения так называемых долгоживущих (persistent) объектов для дальнейшего использования. Модуль настолько часто используется, что многие авторы дополнительных модулей заботятся о том, чтобы новые типы данных (например, матрицы) могли быть правильно законсервированы.



Глава 8

Ошибки и исключения

До сих пор мы лишь упоминали об ошибках, но если Вы пробовали приведенные примеры, то могли увидеть некоторые из них. Можно выделить (как минимум) два различимых типа ошибок: синтаксические ошибки и исключения1.

8.1 Синтаксические ошибки

Синтаксические ошибки, пожалуй, чаще всего встречаются во время изучения языка: >>> while 1 print Hello world

File "<stdin>", line 1

while 1 print Hello world SyntaxError: invalid syntax

Синтаксический анализатор выводит строку, содержащую ошибку, и указывает место, где ошибка была обнаружена. Ошибка обычно вызвана лексемой, предшествующей стрелке: в приведенном примере, ошибка обнаружена на месте ключевого слова print, так как перед ним отсутствует двоеточие (:). Имя файла и номер строки выводится для того, чтобы Вы знали, где искать ошибку в случае, если инструкции считываются из файла.

8.2 Исключения

Даже если инструкция или выражение синтаксически верно, ошибка может произойти при попытке выполнения. Ошибки, обнаруженные во время выполнения, не являются безусловно фатальными, и скоро Вы узнаете, как их можно обрабатывать в программах на языке Python. Большинство исключений, однако, не обрабатываются программами и приводят к сообщениям об ошибке:

>>> 10 * (1/0)

Traceback (innermost last):

1 Синтаксические ошибки также являются исключениями, которые, однако, не могут быть перехвачены на том же уровне.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [ 19 ] 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145