Pregunta

Estoy usando este código simple

for l in bios:
    OpenThisLink = url + l
    response = urllib2.urlopen(OpenThisLink)

para abrir unas 200 URL y buscarlas con regex (y BeautifulSoup), pero después de una docena más o menos recibo estos errores y se cierra IDLE. ¿Qué quieren decir? ¿Cómo puedo manejarlos?

Gracias.

Traceback (most recent call last):

  File "\PROJECTS\JD\jd10.py", line 15, in <module> response = urllib2.urlopen(OpenThisLink)

  File "C:\Python26\lib\urllib2.py", line 124, in urlopen return _opener.open(url, data, timeout)

  File "C:\Python26\lib\urllib2.py", line 389, in open response = meth(req, response)

  File "C:\Python26\lib\urllib2.py", line 502, in http_response 'http', request, response, code, msg, hdrs)

  File "C:\Python26\lib\urllib2.py", line 421, in error result = self._call_chain(*args)

  File "C:\Python26\lib\urllib2.py", line 361, in _call_chain result = func(*args)

  File "C:\Python26\lib\urllib2.py", line 597, in http_error_302 return self.parent.open(new)

  File "C:\Python26\lib\urllib2.py", line 389, in open response = meth(req, response)

  File "C:\Python26\lib\urllib2.py", line 502, in http_response 'http', request, response, code, msg, hdrs)

  File "C:\Python26\lib\urllib2.py", line 421, in error result = self._call_chain(*args)

  File "C:\Python26\lib\urllib2.py", line 361, in _call_chain result = func(*args)

  File "C:\Python26\lib\urllib2.py", line 597, in http_error_302 return self.parent.open(new)

  File "C:\Python26\lib\urllib2.py", line 389, in open response = meth(req, response)

  File "C:\Python26\lib\urllib2.py", line 502, in http_response 'http', request, response, code, msg, hdrs)

  File "C:\Python26\lib\urllib2.py", line 427, in error return self._call_chain(*args)

  File "C:\Python26\lib\urllib2.py", line 361, in _call_chain result = func(*args)

  File "C:\Python26\lib\urllib2.py", line 510, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Error 404: Not Found
  
    
      

    
  
¿Fue útil?

Solución

El error que se genera es HTTPError , específicamente, se lanza un 404 para una de sus URL. Puedes ignorarlo:

for l in bios:
    OpenThisLink = url + l
    try:
        response = urllib2.urlopen(OpenThisLink)
    except urllib2.HTTPError:
        pass

O bien, puede volver a generar el error con un mensaje (marginalmente) más significativo:

for l in bios:
    OpenThisLink = url + l
    try:
        response = urllib2.urlopen(OpenThisLink)
    except urllib2.HTTPError as e:
        raise Exception('Error opening %s: %s' % (e.geturl(), e))

Otros consejos

No sé nada sobre las bibliotecas particulares que está utilizando. Sin embargo, esto me parece un gran seguimiento de pila que conduce a este error original al final:

  

HTTPError: Error HTTP 404: No encontrado

Creo que uno de los enlaces era malo y eso provocó una excepción que no se detectó.

Editar: por " malo " Quiero decir que el servidor no pudo recuperar la página, de ahí el error 404.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top