2011-07-19 33 views
2

我是Python的新手,學習O'Reilly的「Learning Python」系列。我被困在一個擱置的例子,並不知道爲什麼該程序無法正常工作。我正在嘗試構建一些示例數據,然後將其加載到擱置文件中。奇怪的是,它在我將它輸入到IDLE shell時起作用,但當我將它輸入到.py文件並嘗試運行它時,它不起作用。這裏是我的代碼:Python中的擱架模塊3.1.1

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

同樣,當我運行一個空閒外殼這段代碼,我沒有問題,但是當我從一個.py文件我碰到下面的錯誤運行:

Traceback (most recent call last): File "Documents/Python_Learning/shelve.py", line 7, in import shelve File "Documents/Python_Learning/shelve.py", line 9, in db = shelve.open('persondb') AttributeError: 'module' object has no attribute 'open'

如果有幫助,下面是我在Snow Leopard上運行的Python版本的信息:

Python 3.1.1(r311:74543,2009年8月24日,18:44:04) [GCC 4.0.1 Apple Inc. build 5493)] on達爾文

感謝您對新手的幫助!

+0

難道你的CLI解釋器正在加載一個不同的模塊嗎?在IDLE和'.py'文件中嘗試'print(shelve .__ file __)'。 –

+0

請注意,擱架由酸菜驅動,因此這不是在不同計算機上運行的程序實例之間交換數據的好方法。惡意用戶可能會給你一個擱置的文件,在加載到你的程序時會運行惡意代碼。 JSON模塊更適合這種事情。 – James

回答

7

重命名模塊比shelve.py別的東西 - 你自己導入。

+0

哇,我的尷尬,簡單的答案是相匹配的,只有我的感謝,你解決了一個問題,一直在我的學習整個上午。 –

+0

顯然,我不能將問題標記爲已回答,直到再過幾分鐘,但非常感謝您的幫助! –