2017-07-25 101 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結合起來,因爲我有一些線程正在進行,而且現在它似乎正在發揮一定的作用。謝謝! –