Pergunta

Eu estou usando o módulo mechanize para executar algumas consultas web de Python. Eu quero o meu programa para ser resiliente a erros e lidar com todos os tipos de erros (URLs erradas, 403/404 responsese) graciosamente. No entanto, não consigo encontrar na documentação mecanizar dos erros / exceções que joga para vários erros.

Eu apenas chamá-lo com:

    self.browser = mechanize.Browser()
    self.browser.addheaders = [('User-agent', browser_header)]

    self.browser.open(query_url)
    self.result_page = self.browser.response().read()

Como posso saber o que erros / exceções podem ser geradas aqui e lidar com eles?

Foi útil?

Solução

$ perl -0777 -ne'print qq($1) if /__all__ = \[(.*?)\]/s' __init__.py | grep Error 

'BrowserStateError',
'ContentTooShortError',
'FormNotFoundError',
'GopherError',
'HTTPDefaultErrorHandler',
'HTTPError',
'HTTPErrorProcessor',
'LinkNotFoundError',
'LoadError',
'ParseError',
'RobotExclusionError',
'URLError',

Ou:

>>> import mechanize
>>> filter(lambda s: "Error" in s, dir(mechanize))
['BrowserStateError', 'ContentTooShortError', 'FormNotFoundError', 'GopherError'
, 'HTTPDefaultErrorHandler', 'HTTPError', 'HTTPErrorProcessor', 'LinkNotFoundErr
or', 'LoadError', 'ParseError', 'RobotExclusionError', 'URLError']

Outras dicas

Embora este foi postado há muito tempo, eu acho que ainda há uma necessidade de responder a pergunta corretamente, uma vez que aparece nos resultados de pesquisa do Google para essa mesma questão.

Como eu escrevo isto, mecanizar ( versão = (0, 1, 11, Nada, Nada)) em Python 265 levanta urllib2.HTTPError e assim o status http está disponível através de pegar essa exceção, por exemplo:

import urllib2
try:
...  br.open("http://www.example.org/invalid-page")
... except urllib2.HTTPError, e:
...  print e.code
... 
404

Eu encontrei este em seus documentos:

Uma última coisa a notar é que há são alguns catch-all nua, exceto: declarações no módulo, que são lá para manipular a entrada ruim inesperado sem bater seu programa. Se este acontece, é um bug no mecanizar, então Por favor envie-me o texto de advertência.

Então, eu acho que eles não levantar quaisquer exceções. Você também pode pesquisar o código fonte para subclasses de exceção e ver como eles são usados.

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