Si aplicamos el decorador error_handler a una función, cuando lance una excepción, vamos a obtener un diálogo modal mostrandomos el traceback. Recomiendo usarlo solo para debug o versiones beta, un usuario no debería ver el traceback crudo.
#!/usr/bin/env python # -*- coding: utf-8 -*- import gtk def error_handler(function): def out(*args, **kwargs): try: return function(*args, **kwargs) except KeyboardInterrupt: raise KeyboardInterrupt except: from traceback import format_exc error = gtk.MessageDialog( type=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK, message_format=''.join(format_exc()) ) error.set_title("Something went wrong!") if error.run() == gtk.RESPONSE_OK: print "Error OK" else: print "Error closed" error.hide() return out class Gui: def __init__(self): self.window = gtk.Window() self.window.set_default_size(200,200) self.window.set_title("Simple PyGTK example") self.vbox = gtk.VBox() self.button = gtk.Button("Click me!") self.vbox.pack_start(self.button) self.window.add(self.vbox) self.button.connect("clicked", self.on_clicked) self.window.connect("destroy", lambda x: gtk.main_quit()) self.window.show_all() self.window.show() @error_handler def on_clicked(self, widget): raise IndexError if __name__ == "__main__": app = Gui() gtk.main()