Quali sono questi errori e come li gestisco?
-
10-07-2019 - |
Domanda
Sto usando questo semplice codice
for l in bios:
OpenThisLink = url + l
response = urllib2.urlopen(OpenThisLink)
per aprire circa 200 URL e cercarli con regex (e BeautifulSoup), ma dopo una dozzina circa ottengo questi errori e IDLE si chiude. Cosa vogliono dire? Come posso gestirli?
Grazie.
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
Soluzione
L'errore generato è HTTPError
- in particolare, viene lanciato un 404 per uno dei tuoi URL. Puoi ignorarlo:
for l in bios:
OpenThisLink = url + l
try:
response = urllib2.urlopen(OpenThisLink)
except urllib2.HTTPError:
pass
In alternativa, è possibile aumentare nuovamente l'errore con un messaggio (marginalmente) più 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))
Altri suggerimenti
Non so nulla delle librerie particolari che stai utilizzando. Tuttavia, questo mi sembra una traccia di grandi stack che porta a questo errore originale alla fine:
HTTPError: errore HTTP 404: non trovato
Penso che uno dei link sia cattivo e che abbia innescato un'eccezione che non è stata rilevata.
Modifica: da " cattivo " Voglio dire, la pagina non può essere recuperata dal server, quindi l'errore 404.