2010-08-24 14 views
8

Aquí está el código que tengo:¿Cómo recojo un objeto?

import pickle 

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

pickle.dump(alist, c) 

y este es el error que recibo:

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' 

que hay de nuevo? Estoy usando python 2.4 en Windows XP

+0

http://en.wikipedia.org/wiki/Pickling ... –

+1

Sitio incorrecto, intente http://cooking.stackexchange.com/ –

Respuesta

20

No llames a tu archivo pickle.py. Entra en conflicto con el módulo de biblioteca de Python estándar del mismo nombre. Entonces su import pickle no está recogiendo el módulo de python.

+0

pásame :) Voy a eliminar el mío. pero ¿no debería esto arrojar algún tipo de error de referencia circular? ¿Bucle infinito? ;) – froadie

+0

Gracias, eso hizo el trabajo. Ahora que dijiste que recuerdo haber leído sobre este tema en el pasado. Recordaré no nombrar mis scripts igual que los módulos que importo: D – Richard

+0

@froadie: Jeje, en realidad, no lo creo, porque 'import module' no recarga el módulo si ya ha sido importado. – unutbu

3

El código que tiene funciona bien para mí.

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) 
>>> 

La cuestión es que el nombre de archivo "pickle.py" está haciendo la declaración import pickle tratar de importar de su propio archivo en lugar de la biblioteca principal. Cambia el nombre de tu archivo de código.

1

Su secuencia de comandos se llama pickle y, por lo tanto, sombrea el módulo picke de la biblioteca estándar. Se importa e intenta llamar a su función dump (y, por supuesto, no tiene una).

Tenga en cuenta que tiene "suerte" de no ser expulsado en un bucle de importación infinito (porque importar el mismo módulo dos veces solo crea otra referencia al mismo objeto de módulo en la memoria).

Cuestiones relacionadas