Instructions imbriquées try...except en Python
L’instruction try...except
est utilisée en Python pour intercepter les exceptions ou exécuter du code sujet aux erreurs. Chaque langage de programmation a cette fonctionnalité de nos jours, mais en Python, il utilise ces mots et est représenté par les mots-clés try...except
, respectivement. Outre try...except
, un autre mot-clé, à savoir finally
, pourrait également être utilisé avec eux.
Comme les boucles for
, ces instructions try
, catch
et finally
peuvent également être imbriquées, et Dans cet article, nous en parlerons.
Instructions try...except
imbriquées en Python
Comme mentionné ci-dessus, nous pouvons imbriquer ces instructions de la même manière que nous imbriquons les boucles for
. Référez-vous au code suivant pour un exemple.
a = {"a": 5, "b": 25, "c": 125}
try:
print(a["d"])
except KeyError:
try:
print("a:", a["a"])
except:
print("No value exists for keys 'a' and 'd'")
finally:
print("Nested finally")
finally:
print("Finally")
Production :
a: 5
Nested finally
Finally
Comme on peut le voir, le programme ci-dessus initialise d’abord un dictionnaire avec quelques paires clé-valeur puis essaie d’accéder à la valeur de la clé d
. Comme aucune paire clé-valeur n’existe, une exception KeyError
est levée et interceptée par l’instruction except
. Ensuite, les interpréteurs exécutent le code sous le bloc try
imbriqué. Puisqu’une valeur existe pour la clé a
, elle est imprimée sur la console et le code sous l’instruction imbriquée finally
est exécuté. Enfin, le code sous l’instruction externe finally
est exécuté.
Cela signifie que nous pouvons mettre les instructions try
, catch
et finally
sous n’importe quelle déclaration try
, catch
et finally
. Laissez comprendre cela avec un exemple. Nous allons écrire du code qui contient des instructions try
, catch
et finally
et toutes ces instructions ont également des instructions try
, catch
et finally
sous elles.
a = {
"a": 5,
"b": 25,
"c": 125,
"e": 625,
"f": 3125,
}
try:
try:
print("d:", a["d"])
except:
print("a:", a["a"])
finally:
print("First nested finally")
except KeyError:
try:
print("b:", a["b"])
except:
print("No value exists for keys 'b' and 'd'")
finally:
print("Second nested finally")
finally:
try:
print("c:", a["c"])
except:
print("No value exists for key 'c'")
finally:
print("Third nested finally")
Production :
a: 5
First nested finally
c: 125
Third nested finally
Comme nous pouvons le voir, tout d’abord, le bloc externe try
est exécuté. Étant donné qu’aucune valeur n’est trouvée pour la clé d
, le code sous l’instruction imbriquée except
est exécuté et l’instruction imbriquée finally
. Étant donné que le bloc externe try
n’a reçu aucune exception pendant l’exécution, son bloc except
est ignoré et le code sous le bloc externe finally
est exécuté.
Nous pouvons même aller plus loin comme nous le souhaitons et créer n
niveaux d’instructions try
, catch
et finally
imbriquées. Mais à mesure que le nombre de niveaux imbriqués augmente, le flux de contrôle ou le flux d’exécution devient un peu compliqué et ingérable. Il devient difficile de naviguer à travers les déclarations try
, catch
et finally
.