2010-08-12 26 views
28

Quiero agarrar el código de estado HTTP una vez que se lanza una excepción URLError:Python urllib2 URLError Código de estado HTTP.

He intentado esto, pero no sirvió de nada:

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

Extraño. ¿Puedes pegar el código que usas para abrir la url? –

Respuesta

59

No debe marcar un código de estado después de la captura URLError, ya que la excepción puede ser elevada en situaciones donde no hay código de estado HTTP disponible, por ejemplo, cuando' volver a obtener conexión rechazó errores.

Uso HTTPError para comprobar si hay errores específicos HTTP, y luego usar URLError para comprobar si hay otros problemas:

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

Por supuesto, es probable que desee hacer algo más inteligente que acaba de imprimir los códigos de error, Pero se entiende la idea.

+2

Para que sea 100% seguro, es posible que también desee comprobar ValueError ya que urllib2.urlopen arrojará la excepción ValueError cuando la URL ingresada no sea válida o esté en blanco. – zer0c00l

1

No sé por qué usted está recibiendo este error. Si está utilizando urllib2 esto debería ayudar:

import urllib2 
from urllib2 import URLError 

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

El objeto 'URLError' no tiene ningún atributo 'código'. Es mejor usar e.reson. – joctee

Cuestiones relacionadas