Verwenden Sie die Python "Requests" -Bibliothek, wie kann ich feststellen, ob eine ConnectionError Client-Seite oder Server-Seite ist?

Hier ist mein hässliches kleines Code-Snippet jetzt:

for i in range(5): try: self.startTime=time.time() self.rawfeed=requests.get(self.feedurl) continue except ConnectionError: print "Got a connection error. Retrying", i time.sleep(i*i) # giving a bit longer wait each time pass if i == 5: raise self.ResponseTime=time.time()-self.startTime 

Zwei Probleme hier Zuerst scheint meine Ausschlusserklärung nicht "ConnectionError" als Ausnahme zu erkennen (LÖST, Danke, Stapler), sondern beschwert, dass es sich nicht um eine globale Variable handelt. Und zweitens und noch wichtiger, würde ich gerne wissen, ob der Fehler meine Seite ist, oder die Seite des SERVER.

Normalerweise möchte ich auf meine Fehler wiederholen, aber aufgeben und einen SERVER-Fehler melden. (Mit "MY" Fehler, ich meine etwas anderes als ein Server-Fehler.)

2 Solutions collect form web for “Verwenden Sie die Python "Requests" -Bibliothek, wie kann ich feststellen, ob eine ConnectionError Client-Seite oder Server-Seite ist?”

Wenn man sich den Quellcode requests , wird ConnectionError nur dann angehoben, wenn es die maximale Anzahl von Zeiten ( MaxRetryError ) MaxRetryError .

 except MaxRetryError, e: if not self.config.get('safe_mode', False): raise ConnectionError(e) 

Es ist ganz unmöglich zu sagen, ob dies von deiner Seite oder dem Server verursacht wird, da so viele Probleme auf beiden Seiten diesen genauen gleichen Fehler verursachen könnten. Wenn zum Beispiel der HTTP-Daemon des Servers nicht ausgeführt wird, werden Ihre Verbindungsversuche ausgelöst. Das Gleiche wird passieren, wenn Sie sie in Ihrem Router blockieren oder wenn Ihr Router die Verbindung aus irgendeinem anderen Grund fällt.

Ausnahme HTTPError , aber was du nicht HTTPError , ist viel eher ein HTTPError , auf den du sterben kannst. ConnectionError ist etwas wahrscheinlich, aber gar nicht garantiert, um sich selbst zu sein.

Ihre zweite Frage ist, dass Sie diese Klassen nicht richtig importieren. Entweder ändern Sie, außer außer except requests.ConnectionError , oder tun from requests import ConnectionError, HTTPError .

Wie jeder Name in Python, müssen Sie ConnectionError importieren, bevor Sie es verwenden können. In diesem Fall ist es über den bereits importierten requests Namespace verfügbar, also können Sie except requests.ConnectionError: .

Was die Hauptabfrage betrifft, so ist das leider nicht sinnvoll. Es gibt das ganze Internet zwischen dir und dem Server: an welchem ​​Punkt würdest du etwas als "dein" Fehler definieren? Ihr Wifi Access Point? Dein Router? Ihr Modem? Ihr ISP? Einige Upstream-Proxy irgendwo zwischen Ihnen und dem Ziel? Natürlich gibt es keine Möglichkeit zu sagen, wo der Fehler auftritt, ohne ein Dienstprogramm wie traceroute .

  • Login zur Webseite zum Scraping mit Python
  • Wie kann ich den Cache mit Python Requests löschen?
  • Wie man POST-Multipart-Liste von JSON / xml-Dateien mit Python-Anfragen
  • Warum python drucken ist verzögert?
  • Querystring Array-Parameter in Python mit Anfragen
  • Protokollieren Sie alle Anfragen aus dem python-request-Modul
  • Facebook-Diagramm GET-Anforderung mit Python-Anfragen Modul- Zertifikat-Bestätigungsfehler
  • Pythonwechsel Accept-Language mit Anfragen
  • Scraping 'N' Seiten mit Beautifulsoup und Requests (Wie bekomme ich die wahre Seitennummer)
  • Konvertieren von Curl-Aufruf zu Python-Anfragen
  • Python-Anfragen, wie man Content-Typ zur Multipart- / Formular-Datenanforderung hinzufügt
  • Python ist die beste Programmiersprache der Welt.