Pergunta

Eu estou usando libcurl para DL uma página web, então eu estou digitalizá-lo para dados e fazer algo com um dos links. No entanto, de vez em quando a página é diferente, então I, excepto assim i extrair dados ruins e pycurl lança uma exceção. Tentei encontrar o nome de exceção para pycurl mas não teve sorte.

Existe uma maneira que eu posso obter o rastreamento para executar uma função que eu possa despejar o arquivo para que eu possa olhar para a entrada de arquivo e ver eram meu código deu errado?

Foi útil?

Solução

sys.excepthook pode ajudá-lo aqui, onde você pode definir um manipulador de exceção global. Eu não sei como exceções pycurl são tratados, sendo uma biblioteca de ligação, mas provavelmente vai funcionar de atribuí-lo a uma função genérica. Algo 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 função de gancho exceção poderia facilmente ser um método de instância que tenha acesso ao arquivo que as necessidades de dumping.

Outras dicas

Você pode usar um manipulador de exceção genérica.

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

Isto irá escrever um registro agradável que tem as informações de exceção que você está procurando.

Você pode capturar todas as exceções em algum lugar no bloco principal e uso sys.exc_info () para obter informações de retorno de chamada e log que ao seu arquivo. exc_info () retorna não só tipo de exceção, mas também chamam de rastreamento por isso não deve informações que deu errado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top