Ich stimme zu, es ist eher wie ein "Elif nicht [Bedingung (en), die eine Pause einlegen]".
Ich weiß, dass dies ein alter Thread ist, aber ich beschäftige mich gerade mit derselben Frage, und ich bin nicht sicher, ob jemand die Antwort auf diese Frage so erfasst hat, wie ich sie verstehe.
Für mich gibt es drei Möglichkeiten, das else
In For... else
oder die While... else
Anweisungen zu "lesen" , die alle gleichwertig sind:
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)
(Vermutlich gibt es eine solche Bedingung, oder Sie hätten keine Schleife)
Im Wesentlichen ist das "else" in einer Schleife also wirklich ein "elif ...", wobei "..." (1) keine Unterbrechung ist, was (2) NICHT [Bedingung (en), die eine Unterbrechung auslösen] entspricht.
Ich denke, der Schlüssel ist, dass das else
ohne die 'Pause' sinnlos ist, also for...else
beinhaltet a:
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
Die wesentlichen Elemente einer for...else
Schleife lauten also wie folgt, und Sie würden sie in einfacherem Englisch lesen als:
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
Wie auf den anderen Postern bereits erwähnt, wird in der Regel eine Unterbrechung ausgelöst, wenn Sie feststellen können, wonach Ihre Schleife sucht. Dies else:
wird zu "Was tun, wenn das Zielobjekt nicht gefunden wird".
Beispiel
Sie können auch Ausnahmebehandlung, Unterbrechungen und for-Schleifen zusammen verwenden.
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")
Ergebnis
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
Beispiel
Einfaches Beispiel mit einer Pause.
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")
Ergebnis
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
Beispiel
Einfaches Beispiel, bei dem keine Unterbrechung, keine Bedingung, die eine Unterbrechung auslöst, und kein Fehler auftreten.
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")
Ergebnis
z: 0
z: 1
z: 2
z_loop complete without break or error
----------