任何错误发生时,在Python中导致事件?

时间:2017-07-25 01:38:27

标签: python python-3.x ipython spyder

我不确定如何询问我在问什么,我不知道这里是否有任何示例代码真的与此相关,所以如果需要澄清,请问。

我在Python中有一个非平凡的程序可以完成一些事情。它从一些SQL Server数据库表读取,在SQL Server中执行一些DDL(两者都使用pyodbc),分析一些数据,并有一个GUI来协调所有内容,以便将来除了我之外的用户可以自动化该过程。

一切都按预期运作,但显然我不希望未来的用户总是遵守规则。我可以明确地指出哪些输入是错误的(即字段留空),但是有很多东西可能出错。 Try-catch结构是不可能的,因为它们在我的程序中发生的事情网络中引起了一些问题,其中一些嵌入在我正在使用的资源中,更不用说我觉得它可能不是很好的形式到处都有。

话虽如此,我想知道是否有一种方法可以导致事件(可能只是一个说出错误的对话框),这样没有输出窗口视图的用户就会知道出了什么问题。如果我也可以抓取错误消息本身会很好,但这不是必需的。如果问题得到纠正,只要程序可以继续运行,我仍然可以发现错误。

我不确定这是否可能,或者它是否可能采取何种形式,例如监视输出或侦听错误的内容,但我对所有相关信息持开放态度。

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用try/except块包装代码,并将Exception命名为在对话框中打印,例如:

try:

    # your code

except Exception as e:

    print(e) # change this to be in your dialog

这样你就不会在不同的地方多次使用try/except,你基本上会捕捉Exception。另一种方法是针对每个错误raise自定义异常,并使用except捕获它们。

如果您仍然不想使用try/except,可以启动thread以继续检查某些变量(通过loop)以及每当您想要启动错误事件您只需将该变量设置为Truethread将启动错误对话框。例如:

import time
import threading

test1 = False
test2 = False

def errorCheck():
    while True:
        if test1:
            # start error dialog for error1
        if test2:
            # start error dialog for error2
        time.sleep(0.1)

if __name__ == '__main__':
    t = threading.Thread(target=errorCheck)
    t.daemon = True
    t.start()
    # start your app

但是,我建议改为使用try/except