Domanda

Sto usando il modulo meccanize per eseguire alcune query web da Python. Voglio che il mio programma sia resistente agli errori e gestisca tutti i tipi di errori (URL errati, risposta 403/404) con garbo. Tuttavia, non riesco a trovare nella documentazione di meccanizzare gli errori / le eccezioni che genera per vari errori.

Lo chiamo solo con:

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

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

Come posso sapere quali errori / eccezioni possono essere generati qui e gestirli?

È stato utile?

Soluzione

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

Altri suggerimenti

Anche se questo è stato pubblicato molto tempo fa, penso che sia ancora necessario rispondere correttamente alla domanda poiché compare nei risultati di ricerca di Google proprio per questa domanda.

Mentre scrivo, meccanizza ( versione = (0, 1, 11, Nessuno, Nessuno)) in Python 265 genera urllib2.HTTPError e quindi lo stato http è disponibile rilevando questa eccezione, ad esempio:

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

L'ho trovato nei loro documenti:

  

Un'ultima cosa da notare è che lì   sono alcuni cattivi tutti tranne:   dichiarazioni nel modulo, che sono   lì per gestire input errati imprevisti   senza interrompere il programma. Se questo   succede, è un bug nel meccanizzare, quindi   per favore inviami il testo di avviso.

Quindi immagino che non sollevino eccezioni. Puoi anche cercare nel codice sorgente le sottoclassi delle eccezioni e vedere come vengono utilizzate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top