Python 3.1.1 中的搁置模块
Posted
技术标签:
【中文标题】Python 3.1.1 中的搁置模块【英文标题】:Shelve module in Python 3.1.1 【发布时间】:2011-07-19 13:42:01 【问题描述】:我是 Python 新手,并通过 O'Reilly“学习 Python”系列进行学习。我被困在一个搁置的例子中,无法弄清楚为什么该程序不起作用。我正在尝试构建一些示例数据,然后将其加载到搁置文件中。奇怪的是,当我将它输入 IDLE shell 时它可以工作,但当我将它输入 .py 文件并尝试运行它时却不行。这是我的代码:
from Python_Learning.person import Person, Manager
bob = Person('Bob Smith', 'dev', 60000)
sue = Person('Sue Jones', job = 'designer', pay = 100000)
tom = Manager('Tom Jones', 1000000)
import shelve
db = shelve.open('persondb')
for object in (bob, sue, tom):
db[object.name] = object
db.close()
再次,当我在 IDLE shell 上运行此代码时,我没有问题,但是当我从 .py 文件运行时,我收到以下错误:
Traceback(最近一次调用最后一次): 文件“Documents/Python_Learning/shelve.py”,第 7 行,在 进口货架 文件“Documents/Python_Learning/shelve.py”,第 9 行,在 db = shelve.open('persondb') AttributeError:“模块”对象没有“打开”属性
如果有帮助,这里是我在 Snow Leopard 上运行的 Python 版本的信息:
Python 3.1.1(r311:74543,2009 年 8 月 24 日,18:44:04) [GCC 4.0.1 (Apple Inc. build 5493)] 在 darwin 上
感谢您对新手的帮助!
会
【问题讨论】:
会不会是您的 CLI 解释器正在加载不同的模块?在 IDLE 和.py
文件中尝试 print(shelve.__file__)
。
请注意,搁置是由 pickle 驱动的,因此这不是在不同计算机上运行的程序实例之间交换数据的好方法。恶意用户可能会给您一个搁置的文件,该文件在加载到您的程序中时会运行恶意代码。 JSON 模块更适合这类事情。
【参考方案1】:
将您的模块重命名为 shelve.py
以外的其他名称 — 您正在导入自己。
【讨论】:
哇,我为这个答案如此简单而感到尴尬,只有感谢你解决了一个困扰我整个上午学习的问题。 显然,直到几分钟后我才能将问题标记为已回答,但非常感谢您的帮助!以上是关于Python 3.1.1 中的搁置模块的主要内容,如果未能解决你的问题,请参考以下文章