Frage

Ich bin noch relativ neu in Python, also, wenn dies eine offensichtliche Frage ist, ich entschuldige mich.

Meine Frage ist in Bezug auf die urllib2 Bibliothek, und es ist urlopen Funktion. Derzeit wird diese verwende ich eine große Menge an Seiten von einem anderen Server zu laden (sie sind alle auf der gleichen Remote-Host), aber das Skript ab und zu durch einen Timeout-Fehler getötet (ich nehme an, das von den großen Anfragen ist).

Gibt es eine Möglichkeit, das Skript zu halten nach einem Timeout läuft? Ich möchte in der Lage sein, alle Seiten zu holen, so dass ich ein Skript möchten, die versuchen soll, bis er eine Seite bekommt, und dann bewegt sich auf.

Auf einer Seite zur Kenntnis, würde die Verbindung offen für die Server-Hilfe zu halten?

War es hilfreich?

Lösung

Als nächstes Mal, wenn der Fehler auftritt, beachten Sie die Fehlermeldung. Die letzte Zeile wird Ihnen sagen, welche Art von Ausnahme. Zum Beispiel könnte es ein urllib2.HTTPError sein. Sobald Sie den Typ der Exception-Behandlung kennen, können Sie es in einem try...except Block fangen. Zum Beispiel:

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

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top