【发布时间】: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 模块更适合这类事情。