Catch MainLoop exceptions and displaying them in MessageDialogs

I have a wxPython application that relies on an external config file. I want provide friendly message dialogs that show up if there are any config errors. I’ve tried to make this work by wrapping my app.MainLoop() call in a try/except statement.

The code below works for the init code in my MainWindow frame class, but doesn’t catch any exceptions that occur within the MainLoop. How can I catch these exceptions as well?

if __name__ == '__main__':
    app = MyApp(0)
        MainWindow(None, -1, 'My Cool App')
    except ConfigParser.Error, error_message:
        messagebox = wx.MessageDialog(None, error_message, 'Configuration Error', wx.OK | wx.ICON_ERROR)

I’ve read some mention of an OnExceptionInMainLoop method that can be overridden in the wx.App class, but the source I read must be out of date (2004) since wx.App no longer seems to have a method by that name.


I need to be able to catch unhandled exceptions during my mainloop so that I can further handle them and display them in error dialogs, not pass silently, and not terminate the app.

The sys.excepthook solution is too low level and doesn’t play nice with the wxPython mainloop thread. While the link to the other answer does the same try/except wrapping around the mainloop which doesn’t work due, once again, to wxPython spawning a different thread for the app/ui.