在发生任何错误时引发Python中的事件?
我不确定如何问我在问什么,我不知道是否有任何示例代码真的在这里相关,所以如果澄清是必要的,请问。在发生任何错误时引发Python中的事件?
我在Python中有一个非平凡的程序,可以做几件事情。它从一些SQL Server数据库表中读取数据,在SQL Server中执行一些DDL(这两种都使用pyodbc),分析一些数据,并且有一个GUI来编排一切,以便将来除了我以外的用户可以自动执行该过程。
一切正常,因为它应该,但显然我不指望未来的用户总是玩的规则。我可以明确指出哪些输入是错误的(即字段留空),但有相当多的事情可能会出错。 Try-catch结构是不可能的,因为它们会在我的程序中发生的事情的网络中引起一些问题,其中一些嵌入到我正在使用的资源中,更不用说我觉得它可能不是一种好的形式到处都有。
这就是说,我想知道是否有办法引起一个事件(可能只是一个对话框中说错误发生),以便没有输出窗口的用户会知道出了什么问题。如果我也可以自己获取错误信息,那将会很好,但这不是必需的。如果问题得到解决,只要程序可以继续运行,我仍然可以继续发生错误。
我不确定这是否可能,或者如果可能采取什么形式,比如监视输出或侦听错误的东西,但我愿意接受关于此的所有信息。
谢谢
您可以用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
来代替。
我希望不必尝试/除了但它似乎是唯一的选择。我将try/except和threading结合起来,因为我有一些线程正在进行,而且现在它似乎正在发挥一定的作用。谢谢! –