dudas frame.f_exc_*

Gabriel Genellina gagsl-py2 en yahoo.com.ar
Sab Mayo 17 01:34:35 CEST 2008


En Fri, 16 May 2008 17:45:33 -0300, Milton Galo Patricio Inostroza  
Aguilera <minoztro en gmail.com> escribió:

> 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:

Si es solo para registrarla, podrias usar sys.except_hook, o un try/except  
genérico alrededor de todo tu programa:

def main(argv):
   ...
   return 0

if __name__=='__main__':
   import sys
   try:
     sys.exit(main(sys.argv))
   except SystemExit:
     pass
   except Exception,e:
     ...registrarla...

Usar settrace pone muy lento el programa, pero si de verdad lo vas a usar,  
las excepciones generan el evento "exception"

def trace(frame, event, arg):
     if event == 'exception':
         print '[trace]', event, frame.f_code.co_name, frame.f_lineno, arg
     return trace

> 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?

apport_excepthook muy probablemente es parte de apport  
https://wiki.ubuntu.com/Apport. La excepcion actual esta en  
sys.exc_info(), tambien son los argumentos a sys.excepthook, o la pudiste  
haber atrapado con un try/except, asi que extraer esa info desde las  
variables locales de una supuesta funcion de una libreria especifica de  
Ubuntu... no se, no me parece buena idea...

-- 
Gabriel Genellina

------------ 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