【问题标题】:How do I pickle an object?如何腌制一个对象?
【发布时间】:2010-08-24 16:34:22
【问题描述】:

这是我的代码:

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'

发生了什么事?我在 windows xp 上使用 python 2.4

【问题讨论】:

标签: python debugging pickle


【解决方案1】:

不要调用你的文件 pickle.py。它与同名的python标准库模块冲突。所以你的 import pickle 没有选择 python 模块。

【讨论】:

  • 击败我 :) 我会删除我的。但这不应该引发某种循环引用错误吗?无限循环? ;)
  • 谢谢,完成了这项工作。既然你说我记得过去读过这个问题。我会记住不要将我的脚本命名为与我导入的模块相同的名称:D
  • @froadie:呵呵,其实我不这么认为,因为import module如果模块已经被导入就不会重新加载了。
【解决方案2】:

你的代码对我来说很好用。

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 语句尝试从您自己的文件而不是主库导入。重命名您的代码文件。

【讨论】:

    【解决方案3】:

    您的脚本被称为pickle,因此从标准库中隐藏了模块picke。它导入自己并尝试调用其dump 函数(当然它没有)。

    请注意,您“幸运”没有陷入无限的导入循环(因为两次导入同一个模块只会在内存中创建对同一模块对象的另一个引用)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      相关资源
      最近更新 更多