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? Y a-t-il une meilleure façon de structurer cela? Est-ce que cela couvrira toutes mes bases?
python
request
python-requests
John Smith
la source
la source
Réponses:
Jetez un œil aux documents d'exception Requests . En bref:
Pour répondre à votre question, ce que vous montrez ne couvrira pas toutes vos bases. Vous n'attraperez que les erreurs liées à la connexion, pas celles qui expirent.
Que faire lorsque vous interceptez l'exception dépend vraiment de la conception de votre script / programme. Est-il acceptable de quitter? Pouvez-vous continuer et réessayer? Si l'erreur est catastrophique et que vous ne pouvez pas continuer, alors oui, vous pouvez abandonner votre programme en augmentant SystemExit (une bonne façon d'imprimer une erreur et d'appeler
sys.exit
).Vous pouvez intercepter l'exception de classe de base, qui gérera tous les cas:
Ou vous pouvez les attraper séparément et faire des choses différentes.
Comme l'a souligné Christian :
Un exemple:
Imprime:
la source
socket.timeout
exceptions si vous utilisez un délai d'expiration: github.com/kennethreitz/requests/issues/1236Une suggestion supplémentaire pour être explicite. Il semble préférable de passer de spécifique à général dans la pile d'erreurs pour obtenir l'erreur souhaitée, afin que les erreurs spécifiques ne soient pas masquées par l'erreur générale.
contre
la source
L'objet d'exception contient également une réponse d'origine
e.response
, qui pourrait être utile si vous avez besoin de voir le corps de l'erreur en réponse du serveur. Par exemple:la source