Ich habe
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
aber was ich am Ende habe, ist das Fangen aller Arten von HTTP-Fehlern. Ich möchte nur fangen, wenn die angegebene Webseite nicht vorhanden ist (404?).
Ich habe
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
aber was ich am Ende habe, ist das Fangen aller Arten von HTTP-Fehlern. Ich möchte nur fangen, wenn die angegebene Webseite nicht vorhanden ist (404?).
Python 3
from urllib.error import HTTPError
Python 2
from urllib2 import HTTPError
Nur HTTPError
abfangen, behandeln und wenn es kein Fehler 404 ist, einfach raise
verwenden, um die Ausnahme erneut auszulösen.
Siehe das Python Tutorial.
Hier ist ein vollständiges Beispiel für Python 2:
import urllib2
from urllib2 import HTTPError
try:
urllib2.urlopen("some url")
except HTTPError as err:
if err.code == 404:
else:
raise
Tim's Antwort erscheint mir irreführend, besonders wenn urllib2
nicht den erwarteten Code zurückgibt. Zum Beispiel wird dieser Fehler schwerwiegend sein (glauben Sie es oder nicht - es ist kein ungewöhnlicher, wenn URLs heruntergeladen werden):
AttributeError: 'URLError' Objekt hat kein Attribut 'code'
Schnell, aber vielleicht nicht die beste Lösung wäre es, Code mit verschachtelten Try/Except-Blöcken zu verwenden:
import urllib2
try:
urllib2.urlopen("eine url")
except urllib2.HTTPError as err:
try:
if err.code == 404:
# Fehler behandeln
else:
raise
except:
...
Mehr Informationen zum Thema verschachtelte Try/Except-Blöcke Sind verschachtelte Try/Except-Blöcke in Python eine gute Programmierpraxis?
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.