GtkErrorHandler

Si aplicamos el decorador error_handler a una función, cuando lance una excepción, vamos a obtener un dialogo 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()


Recetario/Gui/Gtk/ErrorHandler (última edición 2011-04-10 17:45:07 efectuada por MartinVolpe)

USLA