Erreurs avec le module mécanize de Python
Question
J'utilise le module mechanize
pour exécuter certaines requêtes Web à partir de Python. Je souhaite que mon programme résiste aux erreurs et traite toutes sortes d'erreurs (adresses URL incorrectes, réponses 403/404) avec élégance. Cependant, je ne trouve pas dans la documentation de mechanize les erreurs / exceptions qu’elle génère pour diverses erreurs.
Je l'appelle simplement avec:
self.browser = mechanize.Browser()
self.browser.addheaders = [('User-agent', browser_header)]
self.browser.open(query_url)
self.result_page = self.browser.response().read()
Comment puis-je savoir quelles erreurs / exceptions peuvent être émises ici et les gérer?
La solution
$ 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']
Autres conseils
Bien que cela ait été publié il y a longtemps, je pense qu'il est toujours nécessaire de répondre correctement à la question car elle apparaît dans les résultats de recherche de Google pour cette question même.
Au moment où j'écris ceci, mécanise ( version = (0, 1, 11, Aucun, Aucun)) en Python 265 soulève urllib2.HTTPError et le statut http est disponible en interceptant cette exception, par exemple:
import urllib2
try:
... br.open("http://www.example.org/invalid-page")
... except urllib2.HTTPError, e:
... print e.code
...
404
J'ai trouvé cela dans leur documentation:
Une dernière chose à noter est qu’il existe y a-t-il des fourre-tout nus sauf déclarations dans le module, qui sont là pour gérer une mauvaise entrée inattendue sans planter votre programme. Si ce arrive, c'est un bug dans mécaniser, donc merci de m'envoyer le texte d'avertissement par mail.
Donc, je suppose qu'ils ne soulèvent aucune exception. Vous pouvez également rechercher dans le code source les sous-classes Exception et voir comment elles sont utilisées.