2010-08-12 13 views
28

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)) 
+1

Dziwne. Czy możesz wkleić kod, którego używasz do otwierania adresu URL? –

Odpowiedz

59

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ł.

+2

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

1

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 
+2

Obiekt "URLError" nie ma atrybutu "kod". Lepiej używać e.reason. – joctee

Powiązane problemy