Come elaborare in modo affidabile i dati Web in Python
Domanda
Sto usando il seguente codice per ottenere dati da un sito Web:
time_out = 4
def tryconnect(turl, timer=time_out, retries=10):
urlopener = None
sitefound = 1
tried = 0
while (sitefound != 0) and tried < retries:
try:
urlopener = urllib2.urlopen(turl, None, timer)
sitefound = 0
except urllib2.URLError:
tried += 1
if urlopener: return urlopener
else: return None
[...]
urlopener = tryconnect('www.example.com')
if not urlopener:
return None
try:
for line in urlopener:
do stuff
except httplib.IncompleteRead:
print 'incomplete'
return None
except socket.timeout:
print 'socket'
return None
return stuff
C'è un modo per gestire tutte queste eccezioni senza avere così tanto codice a placca caldaia ogni volta?
Grazie!
Soluzione
Puoi evitare un po 'di codice caldaia anche nella prima funzione:
time_out = 4
def tryconnect(turl, timer=time_out, retries=10):
for tried in xrange(retries):
try:
return urllib2.urlopen(turl, None, timer)
except urllib2.URLError:
pass
return None
e nel secondo:
urlopener = tryconnect('www.example.com')
if urlopener:
try:
for line in urlopener:
do stuff
except (httplib.IncompleteRead, socket.timeout), e:
print e
return None
else:
return None
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow