Python urllib2: Inhaltstext auch während einer HTTPError-Ausnahme lesen?

76

Ich benutze urllib2, um eine Seite über HTTP abzurufen. Manchmal löst 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 ausgibt. Es wäre sehr praktisch, diesen Fehler zu sehen und nicht nur die von urllib2 zurückgegebene HTTPError-Ausnahme.

Wie kann ich den Dokumentinhalt trotz der Ausnahme zurückgeben?

Jamieb
quelle

Antworten:

53

Sie können den Fehler als Antwort behandeln.

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

Wenn ein Fehler ausgelöst wird, gibt der Server einen HTTP-Fehlercode und eine Fehlerseite zurück. Sie können die HTTPError-Instanz als Antwort auf die zurückgegebene Seite verwenden. Dies bedeutet, dass neben dem Codeattribut auch die Methoden read, geturl und info vorhanden sind.

Gareth Simpson
quelle
87
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
Tendayi Mawushe
quelle