Comment gérer les essais et les exceptions en python pour une liste de seau vide


Mon

J'essaie de gérer les exceptions de liste non nulle ou vide lors de l'utilisation de boto3. Je veux savoir s'il existe un bon moyen de code pythonique pour écrire cela.

buckets_list= None
try:        
    my_region = os.environ['AWS_REGION']
    if my_region == 'us-east-1':
        try:
            s3 = boto3.client('s3')
            buckets_list = s3.list_buckets()
        except Exception as err:
            logging.error('Exception was thrown in connection %s' % err)
            print("Error in connecting and listing bucket{}".format(err))
        if buckets_list['Buckets']:
            # Search for all buckets.
            for bucket in buckets_list['Buckets']:
            # my code follow to get other things...
            
        else:
            print("Buckets are empty in this region")
    else:
        print("Region not available")
        raise Exception("Exception was thrown in Region")    

except Exception as err:
    logging.error('Exception was thrown %s' % err)
    print("Error is {}".format(err))
    raise err

Est-ce la bonne façon ou des suggestions pourraient aider.

Abdul Niyas Premier ministre

Vous pouvez utiliser le elsebloc de l'essai sauf suite. C'est utile pour le code qui doit être exécuté si la clause try ne lève pas d'exception .

try:
    s3 = boto3.client('s3')
    buckets_list = s3.list_buckets()
except Exception as err:
    logging.error('Exception was thrown in connection %s' % err)
    print("Error is {}".format(err))
else:
    # This means the try block is succeeded, hence `buckets_list` variable is set.
    for bucket in buckets_list['Buckets']:
        # Do something with the bucket

Un problème que je vois à partir de votre code est que, si l' list_bucketsappel échoue, il y a une chance d'atteindre NameErrorla ligne if buckets_list['Buckets'] is not None:. Car buckets_listn'est pas défini si l' buckets_listappel échoue. Pour comprendre cela, essayez d'exécuter l'extrait suivant :)

try:
    a = (1/0)
except Exception as e:
    print(e)

print(a)

METTRE À JOUR

C'est comme ça que je mettrais ça en place,

  1. Utiliser la .getméthode pour éviterKeyError
  2. Utilisez elseblock de la try exceptsuite pour spécifier que le code doit être exécuté si la clause try ne lève pas d'exception.
my_region = os.environ .get ('AWS_REGION') 
si my_region == 'us-east-1' : 
    essayez : 
        s3 = boto3.client('s3') 
        buckets_list = s3.list_buckets() 
    sauf Exception comme erreur : 
        journalisation. error('Une exception a été levée dans la connexion %s' % err) 
        print("Erreur de connexion et de listage du bucket{}".format(err)) else : 
        buckets_list = buckets_list['Buckets'] 
        sinon buckets_list : 
            print("Buckets sont vides dans cette région") 
        else : 
            # Rechercher tous les buckets. 
            pour le bucket dans buckets_list :
     
                pass
                # Faire quelque chose avec le bucket
    print("Région non disponible")

Articles connexes


Comment gérer les exceptions en python?

el323 elem = browser.find_element_by_xpath(".//label[@class = 'checkbox' and contains(.,'Últimos 15 días')]/input") if ( elem.is_selected() ): print "already selected" else: elem.click() Dans mon code, elem.click()obtient donne parfois une erreur. Si

Ecrire une fonction pour gérer les exceptions en C #

coinbird Est-il raisonnable de penser que je peux écrire une fonction void pour prendre en charge une exception et sortir les trucs qu'un bloc catch ferait normalement? Voici un exemple de mon récupérateur d'exceptions (que je créerais individuellement pour le

Comment ajouter tous les objets à une liste vide en Python?

Redhwan J'ai créé une liste vide, j'ai sorti chaque boucle, en ajoutant un seul objet. Une fois que vous avez terminé d'ajouter tous les objets à la liste, répétez le même processus comme indiqué ci-dessous. Je ne sais pas comment ajouter tous les objets en un

Comment gérer les exceptions dans une compréhension de liste?

Nathan Fellman: J'ai une compréhension de liste en Python dans laquelle chaque itération peut lever une exception. Par exemple , si j'ai: eggs = (1,3,0,3,2) [1/egg for egg in eggs] J'obtiendrai une ZeroDivisionErrorexception dans le 3ème élément. Comment pui