在发生任何错误时在 Python 中引发事件?

Causing an event in Python when any error happens ever?

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

我在 Python 中有一个非常重要的程序,它可以做一些事情。它从一些 SQL 服务器数据库表中读取,在 SQL 服务器中执行一些 DDL(两者都使用 pyodbc),分析一些数据,并有一个 GUI 来协调一切,以便未来的用户除了我可以使过程自动化。

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

话虽这么说,我想知道是否有一种方法可以引发事件(可能只是一个对话框,说明发生了错误),以便没有输出视图的用户 window 会知道出了什么问题。如果我也可以获取错误消息本身,那就太好了,但这不是必需的。只要问题得到纠正,程序可以继续运行,我就可以接受错误仍然存​​在。

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

谢谢

您可以用 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