我已經讀過這個程序的幾個線程,看來常見的解決方案是不正確的縮進。我測試過使用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