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