try:
r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
print e #should I also sys.exit(1) after this?
Ist das richtig? Gibt es einen besseren Weg, dies zu strukturieren? Wird dies alle meine Basen abdecken?
python
request
python-requests
John Smith
quelle
quelle
Antworten:
Schauen Sie sich die Ausnahmedokumente für Anfragen an . Zusamenfassend:
Um Ihre Frage zu beantworten, wird das, was Sie zeigen, nicht alle Ihre Grundlagen abdecken. Sie werden nur verbindungsbezogene Fehler abfangen, keine, bei denen eine Zeitüberschreitung auftritt.
Was zu tun ist, wenn Sie die Ausnahme abfangen, hängt wirklich vom Design Ihres Skripts / Programms ab. Ist es akzeptabel zu beenden? Können Sie es erneut versuchen? Wenn der Fehler katastrophal ist und Sie nicht weitermachen können, können Sie Ihr Programm abbrechen, indem Sie SystemExit auslösen (eine gute Möglichkeit, einen Fehler zu drucken und aufzurufen
sys.exit
).Sie können entweder die Basisklassenausnahme abfangen, die alle Fälle behandelt:
Oder Sie können sie separat fangen und verschiedene Dinge tun.
Wie Christian betonte:
Ein Beispiel:
Wird drucken:
quelle
socket.timeout
Ausnahmen abfangen müssen, wenn Sie eine Zeitüberschreitung verwenden: github.com/kennethreitz/requests/issues/1236Ein zusätzlicher Vorschlag, um explizit zu sein. Es scheint am besten, von spezifisch zu allgemein zu wechseln, um den gewünschten Fehler zu erhalten, damit die gewünschten Fehler nicht durch den allgemeinen Fehler maskiert werden.
vs.
quelle
Das Ausnahmeobjekt enthält auch die ursprüngliche Antwort
e.response
. Dies kann hilfreich sein, wenn der Fehler als Antwort vom Server angezeigt werden muss. Zum Beispiel:quelle