Zgadzam się, to bardziej jak „elif nie [warunek (y) podnoszenia przerwy]”.
Wiem, że to stary wątek, ale teraz zastanawiam się nad tym samym pytaniem i nie jestem pewien, czy ktoś uchwycił odpowiedź na to pytanie w sposób, w jaki je rozumiem.
Dla mnie istnieją trzy sposoby „czytania” THE else
się For... else
lub While... else
oświadczenia, z których wszystkie są równoważne, to:
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)
(przypuszczalnie jest taki warunek, inaczej nie miałbyś pętli)
Zasadniczo „else” w pętli jest tak naprawdę „elif ...”, gdzie „...” oznacza (1) brak przerwy, co jest równoważne (2) NIE [warunkowi (-om) podniesienia przerwy].
Myślę, że kluczem jest to, że nie else
ma sensu bez „przerwy”, więc a for...else
obejmuje:
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
Tak więc podstawowe elementy for...else
pętli są następujące i można je czytać w prostszym języku angielskim jako:
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
Jak powiedzieli inni plakaty, przerwa jest generalnie generowana, gdy jesteś w stanie zlokalizować to, czego szuka twoja pętla, więc else:
staje się „co zrobić, jeśli nie można zlokalizować elementu docelowego”.
Przykład
Możesz także używać obsługi wyjątków, przerw i pętli.
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")
Wynik
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
Przykład
Prosty przykład z uderzeniem przerwy.
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")
Wynik
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
Przykład
Prosty przykład, w którym nie występuje przerwa, brak warunku podniesienia przerwy i nie występuje błąd.
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")
Wynik
z: 0
z: 1
z: 2
z_loop complete without break or error
----------