Я написал приложение на 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.
Спасибо за помощь!!