2010-08-12 14 views
28

Voglio afferrare il codice di stato HTTP volta solleva un'eccezione URLError:Python urllib2 URLError Codice di stato HTTP.

Ho provato a farlo, ma non ha aiutato:

except URLError, e: 
    logger.warning('It seems like the server is down. Code:' + str(e.code)) 
+1

Strano. Puoi incollare il codice che usi per aprire l'url? –

risposta

59

Non si dovrebbe verificare la presenza di un codice di stato dopo la cattura URLError, dal momento che tale eccezione può essere sollevata in situazioni in cui non c'è nessun codice di stato HTTP a disposizione, ad esempio, quando si' riottenere errori di connessione rifiutati.

Usa HTTPError per verificare la presenza di errori specifici HTTP, e quindi utilizzare URLError per verificare la presenza di altri problemi:

try: 
    urllib2.urlopen(url) 
except urllib2.HTTPError, e: 
    print e.code 
except urllib2.URLError, e: 
    print e.args 

Certo, probabilmente si vorrà fare qualcosa di più intelligente di una semplice stampa dei codici di errore, ma tu hai l'idea.

+2

Per essere sicuro al 100%, potresti anche voler controllare l'errore ValueError poiché urllib2.urlopen genererà un'eccezione ValueError quando l'url inserito non è valido o vuoto. – zer0c00l

1

Non certo perché si stanno ottenendo questo errore. Se si utilizza urllib2 questo dovrebbe aiutare:

import urllib2 
from urllib2 import URLError 

try: 
    urllib2.urlopen(url) 
except URLError, e: 
    print e.code 
+2

L'oggetto 'URLError' non ha attributo 'codice'. È meglio usare e.reason. – joctee