Ich neige dazu, zuzustimmen, dass Refactoring in eine Funktion ist in der Regel der beste Ansatz für diese Art von Situation, aber für, wenn Sie wirklich Wenn Sie aus verschachtelten Schleifen ausbrechen müssen, finden Sie hier eine interessante Variante des von @S. Lott beschriebenen Ansatzes zur Erzeugung von Ausnahmen. Sie verwendet Pythons with
Anweisung, um das Anheben von Ausnahmen ein wenig schöner aussehen zu lassen. Definieren Sie einen neuen Kontextmanager (Sie müssen dies nur einmal tun) mit:
from contextlib import contextmanager
@contextmanager
def nested_break():
class NestedBreakException(Exception):
pass
try:
yield NestedBreakException
except NestedBreakException:
pass
Nun können Sie diesen Kontextmanager wie folgt verwenden:
with nested_break() as mylabel:
while True:
print "current state"
while True:
ok = raw_input("Is this ok? (y/n)")
if ok == "y" or ok == "Y": raise mylabel
if ok == "n" or ok == "N": break
print "more processing"
Vorteile: (1) es ist etwas sauberer (kein expliziter Try-Except-Block), und (2) Sie erhalten eine maßgeschneiderte Exception
Unterklasse für jede Verwendung von nested_break
; keine Notwendigkeit, eine eigene Erklärung abzugeben Exception
Unterklasse jedes Mal.
193 Stimmen
Warum gibt es in Python nicht einfach "break(n)", wobei n die Anzahl der Ebenen ist, aus denen man ausbrechen möchte.
14 Stimmen
C++ ist hier schön mit
goto
wenn Sie tief in eine Menge von Schleifen eingebettet sind2 Stimmen
@Nathan See Warum Python nicht nativ erlauben ein Schlüsselwort wie goto für den Ausbruch aus n Schleifen eine sehr schöne Erklärung von Nathan
4 Stimmen
Ned Batchelder hält diesen interessanten Vortrag, in dem es um "Wie komme ich aus zwei Schleifen heraus?" . Spoiler-Alarm: Machen Sie die Doppelschlaufe einfach.