2008-09-30 9 views
6

Estoy usando el módulo mechanize 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.Errores con el módulo de mecanización de Python

Acabo de llamar a:

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 puede ser lanzada aquí y manejarlos?

Respuesta

8
$ 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'] 
+0

Como señala Nicolas, mechanize a menudo propaga las excepciones de urllib2 - ver [enlace de Alexanders a la documentación de urllib2] (http://docs.python.org/lib/module-urllib2.html) –

+0

@James Broadhead: el 'HTTPError' que ve arriba * es *' urllib2.HTTPError'. Usted * no * necesita importar 'urllib2' explícitamente. 'mecanize' proporciona un superconjunto de la interfaz' urllib2'. – jfs

+0

Tiene razón al no tener que referirse explícitamente a urllib2; mi objetivo era simplemente vincular a la documentación. –

1

He encontrado esto en sus documentos:

Una última cosa a tener en cuenta es que hay son algunos cajón de sastre desnuda excepto: declaraciones en el módulo, que son ahí para manejar inesperada mala entrada sin bloquear su programa. Si ocurre esto , es un error en el mecanizado, así que por favor envíeme el texto de advertencia.

Supongo que no generan ninguna excepción. También puede buscar el código fuente de las subclases de excepción y ver cómo se usan.

+1

no estoy seguro de que tienes razón, porque parece mecanizar para propagar excepciones a urllib2 subyacente llama –

+0

En ese caso, urllib2 excepciones están muy bien documentados: http://docs.python.org/lib/module- urllib2.html –

3

Si bien esto ha sido publicado hace mucho tiempo, creo que todavía hay una necesidad de responder a la pregunta correctamente, ya que viene en los resultados de búsqueda de Google por esta misma cuestión .

Mientras escribo esto, mecanizar (versión = (0, 1, 11, Nada, Nada)) en Python 265 urllib2.HTTPError plantea por lo que el estado HTTP disponible a través de la captura de esta excepción, por ejemplo:

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

-1: 'mecanize' proporciona un superconjunto de la interfaz' urllib2'. 'mecanize.HTTPError es urllib2.HTTPError'. – jfs

Cuestiones relacionadas