相关疑难解决方法(0)

Python:如何以另一种方式处理任何未处理的异常?

通常未处理的异常到标准输出(或标准错误?),我建立一个应用程序,我想在关闭前通过这一信息的GUI,并显示给用户,并在同一时间,我想将它写入日志文件.所以,我需要一个带有异常全文的str.

我怎样才能做到这一点?

python exception

8
推荐指数
3
解决办法
8341
查看次数

tkinter python:捕获异常

开始在python中编程我觉得在家里有错误报告.现在我正在使用Tkinter进行编程,我发现经常发生我的程序中存在错误,即使它们生成异常我也没注意到:我抓住它们(有时)因为我去调试Step by步骤(我使用wingIDE)并且例如在给定的行我看到报告的异常.但是令我恼火的是程序没有停止,但即使在不在 try/error 中的块中也会发生这种情况.

如果我说的话有意义,你知道一些至少显示错误的整体方法吗?在Tkinter中,我可以创建一个错误窗口,并在发生任何异常时填充它.

python error-handling tkinter

5
推荐指数
2
解决办法
8861
查看次数

处理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()
Run Code Online (Sandbox Code Playgroud)

要重现该问题,请在"ms命令提示符"中打开它将重命名的文件夹,以便重命名它将从Tkinter代码中引发异常.

我的原始代码是使用线程并且还在执行其他任务,因此我尝试使此测试脚本中的操作尽可能相似.

现在,如果我通过双击它来运行此代码,那么程序只需关闭而不会抛出任何错误.但是,如果我从控制台运行此脚本,那么异常消息将被转储到控制台上,至少我知道,出了点问题.

我可以通过在尝试重命名的代码中使用try/catch来修复此代码,但我也想告知用户这个失败.所以我只想知道在编写Tkinter App时应该遵循哪些编码方法,我想知道: -

1)每当用户双击它时,我可以让我的脚本在文件中转储一些堆栈跟踪.通过这个至少,我会知道一些错误并修复它.

2)我可以阻止tkinter应用程序退出此类错误并在某些TK对话框中抛出任何异常.

感谢帮助!!

python tkinter

4
推荐指数
2
解决办法
8762
查看次数

使用Tkinter处理未捕获的异常

在我的Tkinter Python应用程序中,我试图用来sys.excepthook处理未捕获的异常,但我的处理程序从未被调用过.堆栈跟踪仍然打印出来.

如何在Tkinter应用程序中处理未捕获的异常?

这是一个简单的例子,展示了我的尝试:

import Tkinter as tk
import tkMessageBox
import traceback
import sys

class MyApp(tk.Frame):
    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        self.parent = parent
        self.button_frame = tk.Frame(self)
        self.button_frame.pack(side='top')
        self.button_run = tk.Button(
            self.button_frame, text="Run", command=self.run
        )
        self.button_run.grid(row=0, column=1, sticky='W')

    def run(self):
        tkMessageBox.showinfo('Info', 'The process is running.')
        raise RuntimeError('Tripped.')

def main():
    root = tk.Tk()  # parent widget

    MyApp(root).pack(fill='both', expand=True)

    def handle_exception(exc_type, exc_value, exc_traceback):
        message = ''.join(traceback.format_exception(exc_type,
                                                     exc_value,
                                                     exc_traceback))
        tkMessageBox.showerror('Error', message)

    sys.excepthook = handle_exception

    root.mainloop()  # enter …
Run Code Online (Sandbox Code Playgroud)

python tkinter

0
推荐指数
1
解决办法
474
查看次数

为什么通用“try / except”块不适用于 Python TkInter 回调?

我已经确定,在 Python TkInter GUI 程序中,最佳实践是将整个内容包含在 try / except 块中,以便捕获所有异常并将其呈现给最终用户(而不是默默地出现问题或程序似乎无缘无故地退出)。

然而,这种方法存在一些问题。考虑以下小程序,当单击按钮时,该程序会尝试除以 0:

import tkinter

class Foo():
    def __init__(self):
        # Initialize a new GUI window
        root = tkinter.Tk()

        # The "Generic error" message is shown when the following is uncommented
        #number = 1 / 0

        # Define a button and draw it
        button = tkinter.Button(root, text='Generate an error', command=self.generate_error)
        button.pack()

        # Loop forever
        root.mainloop()

    def generate_error(self):
        # The "Generic error" message is not shown
        number = 1 / 0



if __name__ == …
Run Code Online (Sandbox Code Playgroud)

python tkinter

0
推荐指数
1
解决办法
4441
查看次数

标签 统计

python ×5

tkinter ×4

error-handling ×1

exception ×1