2015-04-21 2 views
7

Gibt es eine Möglichkeit, so etwas zu implementieren:Können Sie die aktuelle Iteration einer Python-Schleife "neu starten"?

for row in rows: 
    try: 
     something 
    except: 
     restart iteration 
+2

Sie können auf die * nächste * Iteration überspringen, aber man kann nicht * Wiederholungs * die aktuelle Iteration. – CoryKramer

+0

Ja, es heißt eine innere Schleife. – Shashank

+0

du meinst wie 'Redo' in Perl? Ich denke, es gibt keine solche Sache in Python. – kratenko

Antwort

9

Sie könnten Ihren try/except Block in einer anderen Schleife gesetzt und dann brechen, wenn es gelingt:

for row in rows: 
    while True: 
     try: 
      something 
      break 
     except Exception: # Try to catch something more specific 
      pass 
+0

würde nicht die "pass" die for loop weitermachen? – user3063864

+0

Nein, weil es in der While-Schleife ist. Der Code wird einfach bis zum Ende des 'except'-Blocks fallen und zurück zum Anfang der' while'-Schleife. Beachten Sie, dass Sie auch 'continue' verwenden können, wenn Sie möchten. – iCodez

+0

Also würde ich dies vor das eigentliche Fleisch meiner for-Schleife stellen, und es läuft einfach, bis "etwas" bestätigt wird, zu passieren, und dann läuft es das eigentliche "etwas" in meiner for-Schleife? – user3063864

3

Obwohl ich, dass der einzige Weg, dies nicht empfehlen würde, zu tun, ist eine While (True) Schleife zu machen, bis er something Geschehen bekommt.

Bedenken Sie die Möglichkeit einer Endlosschleife.

for row in rows: 
    try: 
     something 
    except: 
     flag = False 
     while not flag: 
      try: 
       something 
       flag = True 
      except: 
       pass 
+0

danke, das ist wirklich hilfreich – Jake

4

Sie Zeilen ein Iterator und nur vorher machen könnten, wenn kein Fehler vorhanden ist.

it = iter(rows) 
row = next(it,"") 
while row: 
    try: 
     something 
     row = next(it,"") 
    except: 
     continue 

Auf einer Seite beachten, wenn Sie nicht bereits sind, würde ich spezifische Fehler/Fehler in der Ausnahme, fangen Sie nicht wollen, alles zu fangen.

Wenn Sie Falsey Werten Sie Objekt als Standardwert verwenden:

it = iter(rows) 
row, at_end = next(it,""), object() 
while row is not at_end: 
    try: 
     something 
     row = next(it, at_end) 
    except: 
     continue 
+1

Dies scheint mir klarer zu sein als die 'while True:' Antworten – kratenko

1

Sie sind innerhalb einer unendlichen while-Schleife für Schleife. Überprüfen Sie die Bedingung, bei der Sie die for-Schleife mit einer if-else-Bedingung neu starten möchten, und brechen Sie die innere Schleife. habe eine if-Bedingung innerhalb der while-Schleife, die außerhalb der for-Schleife liegt, um die while-Schleife zu unterbrechen. So:

while True: 
     for row in rows: 
     if(condition) 
     ..... 
     if(condition) 
     break 
    if(condition) 
    break