Я написал приложение в 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()
Чтобы воспроизвести проблему, откройте папку, которая будет переименовывать в «мс командной строки» таким образом, чтобы переименовать его выбросит исключение из Tkinter кода.
Мой исходный код использует потоки и выполняет другие задачи, поэтому я попытался сделать операции в этом тестовом скрипте как можно более похожими.
Теперь, если я запустил этот код, дважды щелкнув по нему, программа просто закроется без каких-либо ошибок. Но если бы я запускал этот скрипт с консоли, тогда сообщения об исключении сбрасывались на консоль и, по крайней мере, я узнавал, что-то не так.
Я могу исправить этот код с помощью try/catch в коде, в котором он пытался переименовать, но я хочу сообщить об этом и об этом пользователе. Поэтому я просто хочу знать, какие подходы к кодированию следует соблюдать при написании Tkinter App, и я хочу знать:
1) Могу ли я заставить мой сценарий выгружать трассировку стека в файл всякий раз, когда пользователь запускал это, дважды щелкая по нему , По крайней мере, я знал бы, что что-то не так и исправить.
2) Могу ли я запретить приложению tkinter выйти из такой ошибки и вызвать любое исключение в некотором диалоге TK.
Спасибо за помощь!
Просто уведомление, вы должны объявить master global только в том случае, если вы переназначили его, но вы просто вызываете его метод, поэтому объявление не нужно. – lolopop
Да, вы правы. Нет необходимости объявлять master как глобальный объект. – sarbjit
Опубликуйте свое решение как ответ, вместо того, чтобы добавить его к вопросу. –