2010-08-12 7 views
28

Je veux saisir le code d'état HTTP une fois qu'il déclenche une exception URLError:Python urllib2 URLError Code d'état HTTP.

J'ai essayé mais n'a pas aidé:

except URLError, e: 
    logger.warning('It seems like the server is down. Code:' + str(e.code)) 
+1

Étrange. Pouvez-vous coller le code que vous utilisez pour ouvrir l'URL? –

Répondre

59

Vous ne devriez pas vérifier un code d'état après la capture URLError, cette exception ne peut être soulevée dans des situations où il n'y a pas de code d'état HTTP disponible, par exemple lorsque vous » re obtenant la connexion a refusé des erreurs.

Utilisez HTTPError pour vérifier les erreurs spécifiques HTTP, puis utilisez URLError pour vérifier d'autres problèmes:

try: 
    urllib2.urlopen(url) 
except urllib2.HTTPError, e: 
    print e.code 
except urllib2.URLError, e: 
    print e.args 

Bien sûr, vous aurez probablement envie de faire quelque chose de plus intelligent que l'impression que les codes d'erreur, mais vous avez l'idée.

+2

Pour être sûr à 100%, vous pouvez également vérifier ValueError car urllib2.urlopen lancera l'exception ValueError lorsque l'URL entrée est invalide ou vide. – zer0c00l

1

Je ne sais pas pourquoi vous obtenez cette erreur. Si vous utilisez urllib2 cela devrait aider:

import urllib2 
from urllib2 import URLError 

try: 
    urllib2.urlopen(url) 
except URLError, e: 
    print e.code 
+2

L'objet 'URLError' n'a pas de 'code' d'attribut. Il est préférable d'utiliser e.reason. – joctee