处理python tkinter中的异常

处理python tkinter中的异常,第1张

概述我在 Python Tkinter中编写了一个应用程序.我最近注意到,对于其中一个 *** 作,如果该 *** 作失败,它有时会关闭(不会给出任何错误).我写了一个小程序来说明问题: – import osfrom Tkinter import *def copydir(): src = "D:\\a\\x\\y" dest = "D:\\a\\x\\z" os.rename(src 我在 Python Tkinter中编写了一个应用程序.我最近注意到,对于其中一个 *** 作,如果该 *** 作失败,它有时会关闭(不会给出任何错误).我写了一个小程序来说明问题: –

import osfrom 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对话框中抛出任何异常.

感谢帮助!!

解决方法 您可以按照说明 here覆盖Tkinter的 CallWrapper.必须使用命名的Tkinter导入而不是通配符导入才能这样做:

import Tkinter as tkimport tracebackclass Catcher:     def __init__(self,func,subst,Widget):        self.func = func         self.subst = subst        self.Widget = Widget    def __call__(self,*args):        try:            if self.subst:                args = apply(self.subst,args)            return apply(self.func,args)        except SystemExit,msg:            raise SystemExit,msg        except:            traceback.print_exc(file=open('test.log','a'))# ...tk.CallWrapper = Catcherb = tk.button(master,command=copydir)b.pack()master.mainloop()
总结

以上是内存溢出为你收集整理的处理python tkinter中的异常全部内容,希望文章能够帮你解决处理python tkinter中的异常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1194889.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存