dudas frame.f_exc_*

Milton Galo Patricio Inostroza Aguilera minoztro en gmail.com
Sab Mayo 17 19:20:27 CEST 2008


El día 16 de mayo de 2008 19:34, Gabriel Genellina
<gagsl-py2 en yahoo.com.ar> escribió:
> 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

está es la que más me satisface...gracias!!

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

sip a mi tampoco, por eso estaba preguntando... :-) buen fin de semana

>
> --
> Gabriel Genellina
>
>
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>



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