dudas frame.f_exc_*

Milton Galo Patricio Inostroza Aguilera minoztro en gmail.com
Vie Mayo 16 22:45:33 CEST 2008


Estimados:

   Estoy tratando de sacar los valores de los siguientes atributos de frame:

f_exc_type, f_exc_value, f_exc_traceback


Pero siempre me encuentro con que están con el valor None, incluso
cuando pongo un valor 1/0...que estoy haciendo mal?...según la
documentación:

f_exc_type, f_exc_value, f_exc_traceback, represent the last exception
raised in the parent frame provided another exception was ever raised
in the current frame

y mi código de prueba es el siguiente:

def algo(a,b,c):
    a = [2, 3, 4]
    print id(a)
    a.append(5)
    1/0

algo(3,2,5)

lo que quiero hacer es capturar la exception para poder registrarla de
alguna forma..estoy utlizando settrace:

def trace(frame, event, arg):
    code = frame.f_code
    if event == 'call':
        print code.co_name
        print frame.f_locals
        print frame.f_exc_value
        print frame.f_exc_traceback
        print frame.f_exc_value
        raw_input()
        return trace
    elif event == 'line':
        print frame.f_exc_value
        print frame.f_exc_traceback
        print frame.f_exc_value
        return trace
    elif event == 'return':
        print code.co_name
        print frame.f_exc_value
        print frame.f_exc_traceback
        print frame.f_exc_value
        print arg
        raw_input()

el código completo está acá [1]

[1] http://pastebin.com/m4ef02aad


Estuve también viendo que curiosamente el nombre de la función que me
muestra en su locals el error es el método apport_excepthook, pero
pregunté y me dicen que este no es de la librería estandar....en
settrace preguntando por este nombre de code {code.co_name}, puedo ver
su locals extraer el traceback y saber en que línea de código python
se produjo la caída y el índice del bytecode {esto salvo algunas
excepciones que detallan en la documentación}....Como se puede hacer
algo de forma más limpia, estandar y eficiente?.....apport_excepthook
siempre contendrá en su locals el traceback y el detalle de la
excepción?

gracias por sus comentarios y ayudas,
-- 
Milton Inostroza Aguilera
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es