Pregunta

Estoy usando el módulo mecanizar para ejecutar algunas consultas web desde Python. Quiero que mi programa sea resistente a los errores y maneje todo tipo de errores (URL incorrectas, respuestas 403/404) con gracia. Sin embargo, no puedo encontrar en la documentación de Mechanize los errores / excepciones que arroja para varios errores.

Solo lo llamo con:

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

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

¿Cómo puedo saber qué errores / excepciones se pueden lanzar aquí y manejarlos?

¿Fue útil?

Solución

$ 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',

O:

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

Otros consejos

Si bien esto se publicó hace mucho tiempo, creo que aún es necesario responder la pregunta correctamente, ya que aparece en los resultados de búsqueda de Google para esta misma pregunta.

Mientras escribo esto, mecanizar ( versión = (0, 1, 11, None, None)) en Python 265 eleva urllib2.HTTPError y el estado http está disponible al detectar esta excepción, por ejemplo:

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

Encontré esto en sus documentos:

  

Una última cosa a tener en cuenta es que hay   son algunos desnudos, excepto:   declaraciones en el módulo, que son   allí para manejar una entrada incorrecta inesperada   sin bloquear tu programa. Si esto   sucede, es un error en mecanizar, así que   por favor envíeme el texto de advertencia.

Entonces supongo que no plantean ninguna excepción. También puede buscar en el código fuente las subclases de excepción y ver cómo se usan.

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