【问题标题】:Causing an event in Python when any error happens ever?当任何错误发生时在 Python 中引发事件?
【发布时间】:2017-12-30 17:49:08
【问题描述】:

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

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

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

话虽如此,我想知道是否有一种方法可以引发事件(可能只是一个显示错误发生的对话框),以便没有查看输出窗口视图的用户知道出了什么问题。如果我也可以自己获取错误消息,那就太好了,但这不是必需的。只要问题得到纠正,程序可以继续运行,我就可以继续发生错误。

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

谢谢

【问题讨论】:

    标签: python python-3.x ipython spyder


    【解决方案1】:

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

    【讨论】:

    • 我希望不必使用 try/except,但似乎这是唯一的选择。我正在结合 try/except 和线程,因为无论如何我都有一些线程正在进行,而且它现在似乎在某种程度上起作用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 2011-04-12
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    相关资源
    最近更新 更多