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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top