66 votes

Gestion des exceptions dans les requêtes Python

Comment gérer les exceptions avec les requêtes de la bibliothèque python ? Par exemple, comment vérifier si le PC est connecté à Internet ?

Quand j'essaie

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

86voto

kindall Points 60645

En supposant que vous ayez import requests vous voulez requests.ConnectionError . ConnectionError est une exception définie par requests . Voir le Documentation de l'API ici.

Le code devrait donc être :

try:
   requests.get('http://www.google.com')
except requests.ConnectionError:
   # handle the exception

33voto

abhishek kasana Points 704

Conformément à la documentation J'ai ajouté les points suivants:-

  1. En cas de problème de réseau (connexion refusée, par exemple un problème d'Internet), Requests lèvera une exception ConnectionError.

    try:
       requests.get('http://www.google.com')
    except requests.ConnectionError:
       # handle ConnectionError the exception
  2. Dans le cas rare d'une réponse HTTP invalide, Requests lèvera une exception HTTPError. Response.raise_for_status() lèvera une exception HTTPError si la requête HTTP renvoie 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
  3. En cas de dépassement de la durée de la demande, une exception Timeout est levée.

    Vous pouvez indiquer à Requests de cesser d'attendre une réponse après un nombre donné de secondes, avec un arg 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
  4. Toutes les exceptions que Requests soulève 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

10voto

kravietz Points 908

En fait, il y a beaucoup plus d'exceptions que requests.get() peut générer plus que de simples 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

10voto

Tanmoy Datta Points 1032

Inclure le module de requêtes en utilisant import requests .

Il est toujours bon d'implémenter la gestion des exceptions. Cela permet non seulement d'éviter une sortie inattendue du script mais peut également aider à enregistrer les erreurs et à notifier les informations. Lorsque j'utilise des requêtes Python, je préfère attraper les exceptions comme ceci :

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")

8voto

StackG Points 83

Pour plus de clarté, c'est

except requests.ConnectionError:

PAS

import requests.ConnectionError

Vous pouvez aussi attraper une exception générale (bien que ce ne soit pas recommandé) avec

except Exception:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X