2017-07-25 105 views
0

我不确定如何问我在问什么,我不知道是否有任何示例代码真的在这里相关,所以如果澄清是必要的,请问。在发生任何错误时引发Python中的事件?

我在Python中有一个非平凡的程序,可以做几件事情。它从一些SQL Server数据库表中读取数据,在SQL Server中执行一些DDL(这两种都使用pyodbc),分析一些数据,并且有一个GUI来编排一切,以便将来除了我以外的用户可以自动执行该过程。

一切正常,因为它应该,但显然我不指望未来的用户总是玩的规则。我可以明确指出哪些输入是错误的(即字段留空),但有相当多的事情可能会出错。 Try-catch结构是不可能的,因为它们会在我的程序中发生的事情的网络中引起一些问题,其中一些嵌入到我正在使用的资源中,更不用说我觉得它可能不是一种好的形式到处都有。

这就是说,我想知道是否有办法引起一个事件(可能只是一个对话框中说错误发生),以便没有输出窗口的用户会知道出了什么问题。如果我也可以自己获取错误信息,那将会很好,但这不是必需的。如果问题得到解决,只要程序可以继续运行,我仍然可以继续发生错误。

我不确定这是否可能,或者如果可能采取什么形式,比如监视输出或侦听错误的东西,但我愿意接受关于此的所有信息。

谢谢

回答

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),只要你想启动的错误事件刚才设置该变量True并且thread将启动错误对话框。例如:

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来代替。

+0

我希望不必尝试/除了但它似乎是唯一的选择。我将try/except和threading结合起来,因为我有一些线程正在进行,而且现在它似乎正在发挥一定的作用。谢谢! –