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