2009-11-02 8 views
51

Ich benutze Urllib2, um eine a-Seite über HTTP zu holen. Manchmal gibt die Ressource einen HTTP-Fehler 400 (Bad Request) aus, wenn meine Anfrage einen Fehler enthält. Diese Antwort enthält jedoch auch ein XML-Element, das eine detaillierte Fehlermeldung gibt. Es wäre sehr praktisch, diesen Fehler und nicht nur die HTTPError-Ausnahme von urllib2 sehen zu können.Python urllib2: Lesen des Inhaltskörpers selbst während der HTTPError-Ausnahme?

Wie kann ich den Inhalt des Dokuments trotz der Ausnahme zurückgeben?

Antwort

43

Sie können den Fehler als Antwort behandeln.

http://www.voidspace.org.uk/python/articles/urllib2.shtml#httperror

Wenn ein Fehler den Server reagiert Fehler Code durch Rückgabe eines HTTP und eine Fehlerseite angehoben wird. Sie können die HTTPError-Instanz als Antwort auf der zurückgegebenen Seite verwenden. Dies bedeutet, dass sowie das Code-Attribut, es auch gelesen hat, geturl und info, Methoden.

60
import urllib2 
try: 
    request = urllib2.Request('http://www.somesite.com') 
    response = urllib2.urlopen(req) 
except urllib2.HTTPError as e: 
    error_message = e.read() 
    print error_message