2010-05-04 149 views
2

我最近回到了一個不得不停止約6個月的項目,重新安裝操作系統並重新啓動後,我遇到了各種瘋狂的事情發生。我確保安裝我之前使用的相同版本(2.6)的python。Python模塊在重新啓動主模塊後沒有更新

它開始給我奇怪的tkinter錯誤,我以前沒有遇到過麻煩,程序相對簡單,當我退出時我留下了2個或3個錯誤,我記錄了並且與接口。

即使在我刪除了違規的代碼段之後,同樣的錯誤也會彈出,事情就變得更加怪異。實際上,回溯指向的是它所引用的模塊中不存在的一條線,例如:當模塊只有200行時,第262行。

在爲主模塊啓動一個全新的文件並複製/粘貼之後,終於認識到有問題的代碼已經不存在了,並且我停止收到錯誤,結果發現我在另一個模塊中創建的代碼沒有任何更新, t通過shell重新啓動程序時顯示。 (我沒有忘記保存。)在擺弄這個之後,當然,舊的界面錯誤回來了,只是在以前工作的不同部分的代碼中。

事實上,如果我恢復到六個月前的文件,程序工作正常。但是,只要我在主模塊中更改了任何內容,接口錯誤就會恢復。

這裏是原來的錯誤:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__ 
return self.func(*args) 
    File "C:\PyStuff\interface.py", line 202, in dispOne 
__main__.top.destroy() 
    File "C:\Python26\lib\lib-tk\Tkinter.py", line 1938, in destroy 
    self.tk.call('destroy', self._w) 
TclError: can't invoke "destroy" command: application has been destroyed 

我猜別的東西是怎麼回事,這裏比我自己可憐的編程等。有人有主意嗎?

編輯:回想起來,我相信我讀了一些關於通過IDLE的shell運行Tkinter程序的不好主意,至少看起來,如果我通過雙擊啓動主模塊,TclError消失了.pyc文件。也許我的問題只是加上Chris Atlee和Vlad在下面提到的時間戳/ PYTHONPATH問題的組合。

回答

0

檢查您的PYTHON_PATH變量,您可能有一箇舊版本的文件。

而且開始你的Python解釋器,然後鍵入以下命令來檢查路徑:

import sys 
print sys.path 

採取在輸出仔細一看,並確保你沒有任何舊目錄坐在那裏。

+0

我沒有設置PYTHONPATH,並且設置到目錄的Python路徑導致tkinter錯誤彈出,就像打印sys.path一樣。需要說明的是:如果我將舊版(6個月前)版本的程序(只是.py文件)複製到一個新目錄中,並通過shell從該目錄運行,該程序可以正常工作。如果我在主模塊的開頭添加了「Print'hello'」,那麼我一旦點擊程序界面上的按鈕就會顯示前面引用的tkinter錯誤。 – Ian 2010-05-04 05:47:53

+0

所以當你剛啓動python解釋器並打印出sys.path時會發生什麼,你會得到任何類型的輸出嗎? – Vlad 2010-05-04 20:09:28

+0

哦,我明白了,對不起。 但是,一切看起來都很好。只是當前目錄加上python26目錄。 – Ian 2010-05-04 23:32:58

2

我有過類似的事情發生。我的問題的原因是我的源代碼管理軟件(hg)將文件的日期設置爲過去的日期。正因爲如此,python選擇使用以前生成的帶有較新時間戳的.pyc文件。

解決方案是在測試代碼之前刪除所有.pyc文件。

+0

舊的時間戳看起來並不是我的問題,而且由於程序非常小,我不會使用任何東西來組織文件,而不是經常備份我所有的文件。 – Ian 2010-05-04 05:25:49