我有一個wxPython應用程序依賴於外部配置文件。我想提供友好的消息對話框,顯示是否有任何配置錯誤。我試圖通過在try/except語句中包裝我的app.MainLoop()調用來完成這項工作。捕獲MainLoop異常並在MessageDialogs中顯示它們
下面的代碼適用於我的MainWindow框架類中的init代碼,但不會捕獲MainLoop中發生的任何異常。我怎樣才能捕捉到這些例外情況?
if __name__ == '__main__':
app = MyApp(0)
try:
MainWindow(None, -1, 'My Cool App')
app.MainLoop()
except ConfigParser.Error, error_message:
messagebox = wx.MessageDialog(None, error_message, 'Configuration Error', wx.OK | wx.ICON_ERROR)
messagebox.ShowModal()
我讀過,可在wx.App類中重寫的OnExceptionInMainLoop方法的一些提及,但我讀的源必須是過時(2004年)以來wx.App似乎不再有這個名字的方法。
編輯:
我需要能夠趕上未處理的異常,我的主循環中,這樣我可以進一步處理他們,在錯誤對話框顯示出來,而不是默默傳遞,而不是終止應用程序。
sys.excepthook解決方案太低級別,並與wxPython主循環線程打不開。雖然到另一個答案的鏈接做了相同的嘗試/除了包裝在主循環中不能正常工作,wxPython再次爲app/ui產生了一個不同的線程。
我有一個wxPython應用程序非常類似的問題。我無法在_wx.App_中使用「redirect = True」(因爲在Chandler項目中),因爲我需要在控制檯窗口中使用_sys.stdout_。 _OnExceptionInMainLoop_似乎回到了wxPython 2.9,但它仍然是測試版,我不能要求客戶端安裝它。重寫「sys.excepthook」彈出一個自定義對話框,自定義日誌記錄對我來說工作得很好。 – bitman 2012-08-23 07:42:17