J'ai remarqué que le code suivant est légal en Python. Ma question est la suivante : pourquoi ? Y a-t-il une raison spécifique ?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
De nombreux débutants tombent accidentellement sur cette syntaxe lorsqu'ils essaient de mettre une balise <code>if</code> / <code>else</code> à l'intérieur d'un bloc <code>while</code> o <code>for</code> et n'indentez pas les <code>else</code> correctement. La solution consiste à s'assurer que le <code>else</code> s'aligne sur le bloc <code>if</code> en supposant que c'était votre intention de les jumeler. Cette question explique <em>pourquoi cela n'a pas provoqué d'erreur de syntaxe </em>y <em>ce que signifie le code qui en résulte. </em>Voir aussi <a href="https://stackoverflow.com/questions/45621722">Je reçois un IndentationError. Comment puis-je le corriger ? </a>pour les cas où il y a <em>es </em>une erreur de syntaxe a été signalée.
11 votes
@detly : C'est parce que la plupart des gens évitent cette construction. :) Je crois que Guido a mentionné pendant le processus Py3k que, à tout le moins, le choix du mot
else
pour cet usage avait été une très mauvaise idée, et qu'ils n'en feraient pas d'autres.6 votes
Nicholas Knight - Oui, aussi tentant que cela puisse être, ce serait probablement quelque chose que je serais le seul à comprendre à première vue. N'importe quel autre pauvre nigaud devrait aller voir les spécifications du langage, ou remonter dans le temps et poster une question ici sur Sta- heeeeey...
1 votes
@detly Quel serait un meilleur mot qu'autre chose ?
1 votes
@Baz - Rien de particulier, je pense simplement que l'implication binaire de "else" ne convient pas très bien à une construction en boucle.
9 votes
L'idée derrière le choix de "else" est que cette construction est censée être souvent utilisée en conjonction avec un "if X : break" à l'intérieur de la boucle while. Puisque la clause "else" est exécutée si nous ne sortons pas de la boucle, elle forme une sorte d'alternative au "if".
1 votes
Je suis tombé sur ça il y a quelques minutes, Voici ce que j'ai compris .
20 votes
Ils devraient le renommer
after:
.4 votes
@naught101 - After n'est pas vraiment approprié non plus, car il ne s'exécuterait pas si vous utilisiez "break" ou "return" pour sortir de la boucle. Je dis toujours aux personnes qui ont du mal à se souvenir de l'usage : " Si vous sortez de la boucle, vous avez la possibilité de faire quelque chose juste avant votre instruction break ". Si vous épuisez votre collection (dans une boucle for) ou si vous brisez la condition de la boucle (dans une boucle while), la clause 'else' est l'endroit où vous devez conclure."
0 votes
Difficile à nommer, mais si j'ai bien entendu, Raymond Hettinger a suggéré
nobreak:
comme un nom ici (BTW, cela fonctionne également enfor
boucles).3 votes
Duplicata possible de Pourquoi python utilise-t-il 'else' après les boucles for et while ?