Pregunta

Estoy utilizando libcurl a DL una página web, entonces yo estoy escaneando para los datos y hacer algo con uno de los enlaces. Sin embargo, de vez en cuando la página es diferente entonces yo, excepto por lo tanto puedo extraer los datos erróneos y pycurl se produce una excepción. He intentado encontrar el nombre de la excepción de pycurl pero no tuvo suerte.

¿Hay una manera que puedo conseguir el rastreo para ejecutar una función para que pueda volcar el archivo, así que puede mirar en el archivo de entrada y ver eran mi código que salió mal?

¿Fue útil?

Solución

sys.excepthook puede ayudar aquí, donde se puede establecer un manejador de excepciones global. No estoy seguro de cómo se manejan pycurl excepciones, que sea una librería de enlace, pero es probable que trabajar para volver a asignar a una función genérica. Algo así como:

>>> import sys
>>> 
>>> def my_global_exception_handler(type, value, traceback):
...     print traceback
...     sys.exit()
... 
>>> sys.excepthook = my_global_exception_handler
>>> raise
<traceback object at 0xb7cfcaa4>

Esta función de enlace excepción podría ser fácilmente un método de instancia que tiene acceso al archivo que necesita dumping.

Otros consejos

Se puede utilizar un gestor de excepciones genérico.

logging.basicConfig( file="someFile.log", level=logging.DEBUG )
logger= logging.getLogger( __name__ )
try:
    curl = pycurl.Curl()
    curl.setopt(pycurl.URL, url)
    # etc.
    curl.perform()
    curl.close
    logger.info( "Read %s", url )
except Exception, e:
    logger.exception( e )
    print e, repr(e), e.message, e.args
    raise
logging.shutdown()

Esto escribirá un buen registro que tiene la información de excepción que usted está buscando.

¿Se puede capturar todas las excepciones en alguna parte del bloque principal y utilizar sys.exc_info () para obtener información de devolución de llamada y registrar que a su archivo. exc_info () devuelve no sólo tipo de excepción, sino también llamar rastreo por lo que debería de información lo que salió mal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top