Bonne manière d'essayer de/à l'exception de l'utilisation de Python demandes module?
try:
r = requests.get(url, params={'s': thing})
except requests.ConnectionError, e:
print e #should I also sys.exit(1) after this?
Est-ce correct? Est-il une meilleure façon de structurer ce? Couvrira toutes mes bases?
Vous devez vous connecter pour publier un commentaire.
Ont un look à la Demande exception docs. En bref:
Pour répondre à votre question, ce que vous montrez vais pas couvrir toutes vos bases. Vous n'aurez qu'à attraper les erreurs liées à la connexion, pas plus que le temps.
Quoi faire quand vous prenez l'exception est vraiment à la conception de votre programme ou script. Est-il acceptable de sortie? Pouvez-vous aller et essayer de nouveau? Si l'erreur est catastrophique, et vous ne pouvez pas aller sur, alors oui, un appel à
sys.exit()
est dans l'ordre.Vous pouvez prendre la classe de base exception, qui va gérer tous les cas:
Ou vous pouvez les attraper séparément et faire des choses différentes.
Comme Christian souligné:
Un exemple:
Sera d'impression:
socket.timeout
des exceptions si vous êtes à l'aide d'un délai d'attente: github.com/kennethreitz/requests/issues/1236r.raise_for_status()
renvoie une erreur? Le message par défaut est un peu flippant et je voudrais donner à l'utilisateur quelques suggestions sur la façon d'éviter les réponses d'erreur.print
des messages différents pour chacun.urllib3
fonctionnalité pour les tentatives de certains codes de retour, estrequests.exceptions.RetryError
. De faire de nouvelles tentatives, mais éviter de devoir reprendre réessayer échecs, voir stackoverflow.com/questions/43481165/...Une suggestion supplémentaire d'être explicite. Il semble préférable d'aller du particulier au général en bas de la pile d'erreurs pour obtenir le désiré erreur d'être pris, de sorte que le spécifique qui n'est pas masqué par le général.
vs