2010-08-12 14 views
28

Ich möchte den HTTP-Statuscode greifen, sobald es eine URLError Ausnahme auslöst:Python urllib2 URLError HTTP-Statuscode.

ich schon versucht, diese aber nicht helfen:

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

Seltsam. Können Sie den Code, den Sie zum Öffnen der URL verwenden, einfügen? –

Antwort

59

Sie nicht für einen Statuscode URLError nach dem Fang überprüfen sollten, da diese Ausnahme in Situationen erhöht werden kann, wo es kein HTTP-Statuscode zur Verfügung, zum Beispiel, wenn Sie‘ Erneutes Erhalten der Verbindung verweigert Fehler.

Verwenden HTTPError überprüfen für HTTP-spezifische Fehler und URLError dann für andere Probleme zu überprüfen verwenden:

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

Natürlich werden Sie wahrscheinlich wollen etwas klüger tun, als nur die Fehlercodes drucken, aber du hast die Idee.

+2

Um 100% sicher zu sein, sollten Sie auch nach ValueError suchen, da urllib2.urlopen die ValueError-Ausnahme auslöst, wenn die eingegebene URL ungültig oder leer ist. – zer0c00l

1

nicht sicher, warum dieser Fehler bekommen. Wenn Sie urllib2 verwenden, sollte dabei helfen:

import urllib2 
from urllib2 import URLError 

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

Das Objekt 'URLError' hat kein Attribut 'code'. Es ist besser, e.reason zu verwenden. – joctee