Domanda

Sono ancora relativamente nuovo per Python, quindi se questo è una domanda ovvia, mi scuso.

La mia domanda è per quanto riguarda la biblioteca urllib2, e la sua funzione urlopen. Attualmente sto usando questo per caricare una grande quantità di pagine da un altro server (sono tutti sullo stesso host remoto), ma lo script viene ucciso ogni tanto da un errore di timeout (suppongo questo è dalle grandi richieste).

C'è un modo per mantenere lo script in esecuzione dopo un timeout? Mi piacerebbe essere in grado di recuperare tutte le pagine, quindi voglio uno script che continuare a provare fino a quando non ottiene una pagina, e quindi si muove su.

Una nota a parte, sarebbe mantenere aperta la connessione al server di aiuto?

È stato utile?

Soluzione

La prossima volta che si verifica l'errore, prendere nota del messaggio di errore. L'ultima riga vi dirà il tipo di eccezione. Ad esempio, potrebbe essere una urllib2.HTTPError. Una volta che si conosce il tipo di eccezione sollevata, si può prendere in un blocco try...except. Ad esempio:

import urllib2
import time

for url in urls:
    while True:
        try:
            sock=urllib2.urlopen(url)
        except (urllib2.HTTPError, urllib2.URLError) as err:
            # You may want to count how many times you reach here and
            # do something smarter if you fail too many times.
            # If a site is down, pestering it every 10 seconds may not
            # be very fruitful or polite.
            time.sleep(10)
        else:              
            # Success  
            contents=sock.read()
            # process contents
            break                # break out of the while loop
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top