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 else
bloc 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_buckets
appel échoue, il y a une chance d'atteindre NameError
la ligne if buckets_list['Buckets'] is not None:
. Car buckets_list
n'est pas défini si l' buckets_list
appel é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,
- Utiliser la
.get
méthode pour éviterKeyError
- Utilisez
else
block de latry
except
suite 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")