chcę chwycić kod stanu HTTP raz podnosi wyjątek URLError:Python urllib2 URLError Kod statusu HTTP.
próbowałem tego, ale nie pomogło:
except URLError, e:
logger.warning('It seems like the server is down. Code:' + str(e.code))
chcę chwycić kod stanu HTTP raz podnosi wyjątek URLError:Python urllib2 URLError Kod statusu HTTP.
próbowałem tego, ale nie pomogło:
except URLError, e:
logger.warning('It seems like the server is down. Code:' + str(e.code))
Nie należy sprawdzić kodem stanu po łapania URLError
, ponieważ wyjątek ten może zostać podniesiony w sytuacjach, w których nie ma kod stanu HTTP dostępne, na przykład, gdy” Ponowne otrzymanie połączenia odrzuciło błędy.
Zastosowanie HTTPError
aby sprawdzić HTTP konkretnych błędów, a następnie użyj URLError
aby sprawdzić inne problemy:
try:
urllib2.urlopen(url)
except urllib2.HTTPError, e:
print e.code
except urllib2.URLError, e:
print e.args
Oczywiście, prawdopodobnie będziesz chciał zrobić coś więcej niż tylko sprytny drukowania kodów błędów, ale masz pomysł.
Aby być w 100% bezpiecznym, możesz również chcieć sprawdzić wartość ValueError, ponieważ urllib2.urlopen spowoduje zgłoszenie wyjątku ValueError, gdy wprowadzony adres url jest nieprawidłowy lub pusty. – zer0c00l
Nie wiem, dlaczego otrzymujesz ten błąd. Jeśli używasz urllib2
to powinno pomóc:
import urllib2
from urllib2 import URLError
try:
urllib2.urlopen(url)
except URLError, e:
print e.code
Obiekt "URLError" nie ma atrybutu "kod". Lepiej używać e.reason. – joctee
Dziwne. Czy możesz wkleić kod, którego używasz do otwierania adresu URL? –