Le site else:
Block ist verwirrend und (fast) nutzlos. Er ist auch Teil des for
y while
Erklärungen.
Sogar auf einem if
-Erklärung, die else:
kann auf wirklich schreckliche Weise missbraucht werden, um Fehler zu erzeugen, die sehr schwer zu finden sind.
Bedenken Sie dies.
if a < 10:
# condition stated explicitly
elif a > 10 and b < 10:
# condition confusing but at least explicit
else:
# Exactly what is true here?
# Can be hard to reason out what condition is true
Überlegen Sie es sich zweimal else:
. Es ist im Allgemeinen ein Problem. Vermeiden Sie es, außer in einem if
-Statement und erwägen Sie auch dann die Dokumentation der else
- Bedingung, um sie explizit zu machen.
5 Stimmen
Die meisten Antworten scheinen sich darauf zu konzentrieren, warum wir das Material in der else-Klausel nicht einfach in die try-Klausel selbst einfügen können. Die Frage stackoverflow.com/questions/3996329 fragt ausdrücklich, warum der Code der else-Klausel nicht gehen kann nach der Try-Block selbst, und diese Frage ist mit dieser hier verknüpft, aber ich sehe hier keine klare Antwort auf diese Frage. Ich glaube stackoverflow.com/a/3996378/1503120 beantwortet diese Frage in hervorragender Weise. Ich habe auch versucht, die verschiedenen Bedeutungen der einzelnen Klauseln zu erläutern stackoverflow.com/a/22579805/1503120 .
2 Stimmen
Wenn die Ausnahme nicht auslöst, soll vor der abschließenden Bereinigung etwas geschehen, das nicht selbst die gleiche Ausnahmebehandlung auslösen soll.
5 Stimmen
Nachdem ich vergessen hatte, was
else
tut intry/else
yfor/else
Ich habe es mehrmals mit dem Begriffnoexcept
ynobreak
in diesen jeweiligen Zusammenhängen. Ich persönlich halte es für eine so unglückliche Überfrachtung des Wortes, dass ich versuche, es nach Möglichkeit zu vermeiden, da es die Leute, die den Code lesen, dazu zwingt, sich zu fragen: "Was macht dieses Ding nochmal?" Normalerweise ist ein Flag, einecontinue
obreak
Aussage kann das, was ich ausdrücken will, mit wenigen zusätzlichen Zeilen, aber sicherlich mit mehr Klarheit wiedergeben (wenn die Popularität der Frage ein Hinweis darauf ist).0 Stimmen
Es ist besser, sie zu nennen
except-else
anstelle vontry-else
.