Comment gérer les exceptions avec python requêtes de bibliothèque? Par exemple, comment vérifier si le PC est connecté à Internet?
Quand j'essaye
try:
requests.get('http://www.google.com')
except ConnectionError:
# handle the exception
il me donne le nom d'erreur ConnectionError
n'est pas défini
En supposant que vous ayez import requests
, tu veux requests.ConnectionError
. ConnectionError
est une exception définie par requests
. Voir documentation API ici.
Ainsi, le code devrait être:
try:
requests.get('http://www.google.com')
except requests.ConnectionError:
# handle the exception
pour plus de clarté, c'est
except requests.ConnectionError:
NE PAS
import requests.ConnectionError
Vous pouvez également intercepter une exception générale (bien que ce ne soit pas recommandé) avec
except Exception:
En fait, requests.get()
peut générer bien plus d'exceptions que ConnectionError
. En voici quelques-unes que j'ai vues en production:
from requests import ReadTimeout, ConnectTimeout, HTTPError, Timeout, ConnectionError
try:
r = requests.get(url, timeout=6.0)
except (ConnectTimeout, HTTPError, ReadTimeout, Timeout, ConnectionError):
continue
Inclure le module des demandes à l'aide de import requests
.
Il est toujours bon d'implémenter la gestion des exceptions. Cela permet non seulement d'éviter la fermeture inattendue du script, mais peut également aider à consigner les erreurs et les notifications d'informations. Lorsque j'utilise Python requêtes, je préfère intercepter des exceptions comme celle-ci:
try:
res = requests.get(adress,timeout=30)
except requests.ConnectionError as e:
print("OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below.\n")
print(str(e))
continue
except requests.Timeout as e:
print("OOPS!! Timeout Error")
print(str(e))
continue
except requests.RequestException as e:
print("OOPS!! General Error")
print(str(e))
continue
except KeyboardInterrupt:
print("Someone closed the program")
Selon le documentation , j'ai ajouté les points ci-dessous: -
En cas de problème de réseau (connexion refusée, par exemple un problème Internet), les requêtes déclencheront une exception ConnectionError.
try:
requests.get('http://www.google.com')
except requests.ConnectionError:
# handle ConnectionError the exception
En cas de réponse HTTP non valide rare, les demandes déclencheront une exception HTTPError. Response.raise_for_status () déclenchera une HTTPError si la requête HTTP a renvoyé un code d'état infructueux.
try:
r = requests.get('http://www.google.com/nowhere')
r.raise_for_status()
except requests.exceptions.HTTPError as err:
#handle the HTTPError request here
En cas de temps hors demande, une exception Timeout est levée.
Vous pouvez dire aux demandes d'arrêter d'attendre une réponse après un certain nombre de secondes, avec un argument de délai d'attente.
requests.get('https://github.com/', timeout=0.001)
# timeout is not a time limit on the entire response download; rather,
# an exception is raised if the server has not issued a response for
# timeout seconds
Toutes les exceptions que Requests déclenche explicitement héritent de requests.exceptions.RequestException. Ainsi, un gestionnaire de base peut ressembler,
try:
r = requests.get(url)
except requests.exceptions.RequestException as e:
# handle all the errors here