我已经读过这个程序的几个线程,看来常见的解决方案是不正确的缩进。我测试过使用PEP8
在线工具我的代码,并通过行手动去按行,我不跟我的压痕发现任何问题,所以我怀疑它是什么错误:AttributeError:lpoApp实例没有属性'数据库'
AttributeError: lpoApp instance has no attribute 'database'
我一直在寻找现在几个小时,我很难过。任何有识之士将不胜感激。
以下是堆栈跟踪:
Traceback (most recent call last):
File "/CodeClinic/lpoApp.py", line 213, in <module>
main()
File "/CodeClinic/lpoApp.py", line 209, in main
app = lpoApp(root)
File "/CodeClinic/lpoApp.py", line 27, in __init__
self._createGUI()
File "/CodeClinic/lpoApp.py", line 94, in _createGUI
ttk.Button(self.frame_input, text='Submit', command=self._submit_callback()).grid(
File "/CodeClinic/lpoApp.py", line 166, in _submit_callback
data = list(self.database.get_data_for_range(start, end))
AttributeError: lpoApp instance has no attribute 'database'
让我们制定出的方式,通过它,开始调用的main():
if __name__ == "__main__":
main()
它调用的应用程序:
def main():
root = Tk()
app = lpoApp(root)
root.mainloop()
现在,我们在根内创建了lpoApp
的一个实例窗口,lpoApp
构造函数已被调用。这是我们应当实例lpoDB
(其中已导入)作为self.database
:
def __init__(self, master):
self.master = master
self._createGUI()
self.database = lpoDB.lpoDB()
self.master.protocol("WM_DELETE_WINDOW", self._safe_close)
而在_createGUI()
方法我们绑定self._submit_callback()
到Submit
按钮命令。所以,让我们来峰说:
ttk.Button(self.frame_input, text='Submit',
command=self._submit_callback()).grid(row=2, column=0,
columnspan=9, padx=5)
现在,我们的Submit
按钮有一个回调lpoApp的_submit_callback()
方法:
def _submit_callback(self):
# I printed `start` and `end` at this point prior to
# passing them in to the next call and they had valid
# datetime formats that get_data_for_range is expecting
data = list(self.database.get_data_for_range(start, end))
用我喜欢的IDE PyCharm,我通过在调试模式下的代码运行这允许我检查self
的属性。未列出self.database
。因此,解释器以某种方式传递该声明,而不是实例化我的数据库连接。
关于为什么会发生这种情况的任何想法,或者我可以做些什么来进一步测试/调试?
我有一个运行理论;我的不同代码编辑器可能有混合的空格和制表符。我现在正在测试这个理论......只是fyi。 – DroBuddy 2015-02-08 02:21:53
用'python lpoApp.py -t'从CLI运行我的代码没有提供任何反馈。我为我的版本'人python'来验证它是 - t而不是--tt太:( – DroBuddy 2015-02-08 02:25:01
我刚刚转换我的项目,所以所有选项卡都转换为空格,我仍然收到此错误。Darn it。 – DroBuddy 2015-02-08 02:32:38