我已經在Python Tkinter中編寫了一個應用程序。我最近注意到,對於其中一個操作,如果該操作失敗,它有時會關閉(無任何錯誤)。我已經寫了一個小程序來說明這個問題: -在python tkinter中處理異常
import os
from Tkinter import *
def copydir():
src = "D:\\a\\x\\y"
dest = "D:\\a\\x\\z"
os.rename(src,dest)
master = Tk()
def callback():
global master
master.after(1, callback)
copydir()
print "click!"
b = Button(master, text="OK", command=copydir)
b.pack()
master.after(100, callback)
mainloop()
要重現該問題,打開它會在「MS命令提示符」重新命名,從而將其改名會拋出異常從Tkinter的代碼的文件夾。
我原來的代碼是使用線程並且正在執行其他任務,所以我試圖使這個測試腳本中的操作儘可能相似。
現在,如果我通過雙擊運行此代碼,那麼程序只需關閉而不會引發任何錯誤。但是如果我從控制檯運行這個腳本,那麼異常消息就會在控制檯上丟失,至少我知道,有些事情是錯誤的。
我可以通過在試圖重命名的代碼中使用try/catch來修復此代碼,但我也想通知用戶有關此故障的信息。所以我只想知道在編寫Tkinter應用程序時應該遵循什麼編碼方法,並且我想知道: -
1)我可以讓我的腳本在文件中轉儲一些堆棧跟蹤,只要用戶通過雙擊運行它。由此至少,我會知道一些錯誤並修復它。
2)我可以防止tkinter應用程序退出這樣的錯誤,並在一些TK對話框中拋出任何異常。
感謝您的幫助!
只是一個通知,你必須聲明全局主只有當你重新分配它,但你只是調用它的方法,所以聲明是不必要的。 – lolopop 2013-03-06 11:48:55
是的,你是對的。不需要將主設備聲明爲全局對象。 – sarbjit 2013-03-06 12:43:17
將您的解決方案發布爲答案,而不是將其添加到問題中。 – 2013-03-06 17:46:15