Python:使用2个py模块时,搁置属性错误

Python:使用2个py模块时,搁置属性错误,python,shelve,Python,Shelve,我正在试用搁置模块,遇到了一些麻烦。我的意图是让一个模块在第二个模块中调用一个函数,该函数将修改搁置中的文件。我制作了一个原型(如下),它只是尝试将变量设置为存储在书架中的某个对象,然后打印该对象 尝试执行此操作时,会出现以下属性错误: AttributeError: 'module' object has no attribute 'User' 我猜它没有意识到我的“User”类存在,但我不确定原因。File1在其主函数中调用与File2相同的函数,并且在该实例中正常工作。我很感激你能帮我解

我正在试用搁置模块,遇到了一些麻烦。我的意图是让一个模块在第二个模块中调用一个函数,该函数将修改搁置中的文件。我制作了一个原型(如下),它只是尝试将变量设置为存储在书架中的某个对象,然后打印该对象

尝试执行此操作时,会出现以下属性错误:

AttributeError: 'module' object has no attribute 'User'
我猜它没有意识到我的“User”类存在,但我不确定原因。File1在其主函数中调用与File2相同的函数,并且在该实例中正常工作。我很感激你能帮我解决这个问题,我不知道这个问题是什么

import SE_ex2

SE_ex2.cacheTest()


完全回溯:

Traceback (most recent call last):
  File "C:\Users\akaGrim\My Documents\Aptana Studio 3 Workspace\ShelveTest\SE_ex1.py", line 3, in <module>
    SE_ex2.cacheTest()
  File "C:\Users\akaGrim\My Documents\Aptana Studio 3 Workspace\ShelveTest\SE_ex2.py", line 14, in cacheTest
    obj = cache_users[ "user_red" ]
  File "C:\Python27\lib\shelve.py", line 122, in __getitem__
    value = Unpickler(f).load()
AttributeError: 'module' object has no attribute 'User'
回溯(最近一次呼叫最后一次):
文件“C:\Users\akaGrim\My Documents\Aptana Studio 3 Workspace\ShelveTest\SE_ex1.py”,第3行,在
SE_ex2.cacheTest()
文件“C:\Users\akaGrim\My Documents\Aptana Studio 3 Workspace\ShelveTest\SE_ex2.py”,第14行,在cacheTest中
obj=缓存用户[“用户红色”]
文件“C:\Python27\lib\shelve.py”,第122行,在\uu getitem中__
value=Unpickler(f).load()
AttributeError:“模块”对象没有属性“用户”

我以前也有过类似的问题。尝试将用户类放在另一个文件中,这样您就可以从这两个文件中的同一模块导入它。我认为它被搁置为
用户
,但当你解除它的自我时,你希望它明白
seu ex2.User
是它一直在调用的用户。它还可以显式导入用户类,如中所示

from SE_ex2 import User
import SE_ex2
SE_ex2.cache_test()
修正:

pickle类需要位于命名空间中 原因是shelf使用pickle,因此它使用用户类:

使用自己的类时,必须确保类 正在pickle的将出现在读取 泡菜。只有实例的数据被pickle,而不是类 定义。类名用于查找要创建的构造函数 取消勾选时显示新对象。以这个例子为例,它写道 将类的实例添加到文件:

引述:


你能显示完整的回溯吗?编辑我的帖子以添加完整的回溯。
from SE_ex2 import User
import SE_ex2
SE_ex2.cache_test()
import SE_ex2
from SE_ex2 import User

SE_ex2.cacheTest()