web-dev-qa-db-fra.com

Python demande la gestion des exceptions

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

32
tux

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
67
kindall

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:
7
StackG

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
4
kravietz

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")
1
Tanmoy Datta

Selon le documentation , j'ai ajouté les points ci-dessous: -

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
1
abhishek kasana