Как мне засолить объект? - PullRequest
       6

Как мне засолить объект?

8 голосов
/ 24 августа 2010

Вот код, который у меня есть:

import pickle 

alist = ['here', 'there']
c = open('config.pck', 'w')

pickle.dump(alist, c)

, и я получаю эту ошибку:

Traceback (most recent call last):
  File "C:\pickle.py", line 1, in ?
import pickle
  File "C:\pickle.py", line 6, in ?
pickle.dump(alist, c)
AttributeError: 'module' object has no attribute 'dump'

что происходит?Я использую Python 2.4 на Windows XP

Ответы [ 3 ]

21 голосов
/ 24 августа 2010

Не называйте свой файл pickle.py. Это противоречит стандартному модулю библиотеки Python с тем же именем. Таким образом, ваш import pickle не поднимает модуль python.

3 голосов
/ 24 августа 2010

Код у вас отлично работает для меня.

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pickle
>>>
>>> alist = ['here', 'there']
>>> c = open('config.pck', 'w')
>>>
>>> pickle.dump(alist, c)
>>>

Проблема в том, что ваше имя файла "pickle.py" заставляет оператор import pickle пытаться импортировать из собственного файла вместо основной библиотеки. Переименуйте ваш файл кода.

1 голос
/ 24 августа 2010

Ваш сценарий называется pickle и поэтому скрывает выбор модуля из стандартной библиотеки.Он импортирует себя и пытается вызвать свою функцию dump (и, конечно, у нее ее нет).

Обратите внимание, что вам "повезло", что вы не попали в бесконечный цикл импорта(потому что импорт одного и того же модуля дважды просто создает другую ссылку на тот же объект модуля в памяти).

...