Je suis d'accord, c'est plutôt un «elif pas [condition (s) soulevant la pause]».
Je sais que c'est un vieux fil, mais je regarde la même question en ce moment, et je ne suis pas sûr que quiconque ait saisi la réponse à cette question de la façon dont je la comprends.
Pour moi, il existe trois façons de "lire" les instructions else
in For... else
ou While... else
, qui sont toutes équivalentes, sont les suivantes:
else
==
if the loop completes normally (without a break or error)
else
==
if the loop does not encounter a break
else
==
else not (condition raising break)
(sans doute existe-t-il une telle condition, sinon vous n'auriez pas de boucle)
Donc, essentiellement, le "else" dans une boucle est vraiment un "elif ..." où '...' est (1) pas de rupture, ce qui équivaut à (2) PAS [condition (s) augmentant la rupture].
Je pense que la clé est que le else
est inutile sans la «pause», donc un for...else
comprend:
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
Ainsi, les éléments essentiels d'une for...else
boucle sont les suivants, et vous les liriez en anglais plus simple:
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
Comme les autres affiches l'ont dit, une pause est généralement déclenchée lorsque vous êtes en mesure de localiser ce que recherche votre boucle, de sorte que else:
devient "ce qu'il faut faire si l'élément cible n'est pas localisé".
Exemple
Vous pouvez également utiliser la gestion des exceptions, les interruptions et les boucles for ensemble.
for x in range(0,3):
print("x: {}".format(x))
if x == 2:
try:
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
except:
print(AssertionError("ASSERTION ERROR: x is {}".format(x)))
break
else:
print("X loop complete without error")
Résultat
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
Exemple
Exemple simple avec coupure.
for y in range(0,3):
print("y: {}".format(y))
if y == 2: # will be executed
print("BREAK: y is {}\n----------".format(y))
break
else: # not executed because break is hit
print("y_loop completed without break----------\n")
Résultat
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
Exemple
Exemple simple où il n'y a aucune interruption, aucune condition provoquant une interruption et aucune erreur n'est rencontrée.
for z in range(0,3):
print("z: {}".format(z))
if z == 4: # will not be executed
print("BREAK: z is {}\n".format(y))
break
if z == 4: # will not be executed
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
else:
print("z_loop complete without break or error\n----------\n")
Résultat
z: 0
z: 1
z: 2
z_loop complete without break or error
----------