Python Shelve和__main__模块问题

问题描述

如果我们在shelve模块中搁置了,然后导入创建的数据库将导致错误,那么Python __main__无法正常工作的主要原因是什么?或者说得更清楚一些,例如,我具有以下结构:

main.py\
        sh\
            classmaker.py
            db\

main.py包括

#main.py
import shelve,sys
sys.path.append('D:\\Python\\Class Topics\\sh')

db = shelve.open('sh\\db\\db')
print(db['Henry'])

classmaker.py具有以下内容

import shelve
class C:
    def __init__(self,name):
        self.name = name

c = C('Henry')

with shelve.open('db\\db') as d:
    d[self.name] = c 

如果执行main.py,我将得到一个KeyError: 'Henry'。要变通解决此问题,我进行了以下更改:

#structure
main.py\
        sh\
            classmaker.py
            dbmaker.py
            db\
#classmaker.py
import shelve
class C:
    def __init__(self,name):
        self.name = name
#dbmaker.py
import shelve
from classmaker import *

c = C('Henry')

with shelve.open('db\\db') as db:
    db[c.name] = c

有了这些更改,现在如果我执行main.py,它将按以下方式工作:

#main.py result
<classmaker.C object at 0x00000243A89D2F48>
[Finished in 0.3s]

请注意:我已确保该目录同时包含classmaker.py上的dbmaker.pyPYTHONPATH,如上main.py所示。

我想知道为什么会这样吗?请帮我解决这个问题。

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)