我有一个python文件负责optionparsing,设置一些东西,然后启动gui。 gui本身和一些辅助函数在另一个python文件中。
file1.py:
myConf = None
if __name__ == "__main__":
confFileName = HOME+"/test/.conf"
myConf = Config()
print(myConf) # works as expected
run() # this starts the gui
file2.py
from file1 import myConf
...somestuff...
def on_clicked( self, widget ):
mappings = myConf.GetMappings()
一旦触发on_clicked回调,我就会收到异常:
AttributeError: 'NoneType' object has no attribute 'GetMappings'
这意味着file2中使用的myConf尚未初始化。 但是,在文件1中初始化myCOnf之后设置了gui。 我希望myConf成为一个全局对象,它存储的信息然后每个其他文件都可以在运行时访问。
什么错了?为什么它没有按预期工作?
file2是否有自己尚未初始化的符号副本?
答案 0 :(得分:0)
直接运行file1.py时,会执行__name__ == "__main__"
下的代码,初始化myConf
并按预期工作。但是,当您执行from file1 import myConf
时,file1.py 不主脚本,因此会将myConf保留在初始化为None
的位置。因此,导入myConf时,其值为None
,并引发None
没有属性getMappings
的错误。它没有此属性,因此意味着引发错误。
要解决此问题,您需要将初始化脚本移出if __name__ == "__main__"
。这使您的脚本看起来像这样:
myConf = None
confFileName = HOME+"/test/.conf"
myConf = Config()
if __name__ == "__main__":
print(myConf)
run() # this starts the gui