2016-08-06 5 views
-1

Gibt es ein Muster, mit dem Sie den Context Manager verlassen und den Kontrollfluss an den Code hinter dem with (...): zurückgeben können?Können Sie von einem Context Manager "brechen"?

Zum Beispiel (nicht wirklich funktionieren):

with open('/etc/passwd', 'r') as f: 
    f.seek(0, 2) 
    if f.tell() < 10: 
     print "The file is too small!" 
     break 

    # Process the file. 

Gibt es etwas, ich break mit ersetzen kann, das Gleiche zu tun?

+1

Ihr Beispiel klingt wie Sie lieber Ausnahmen verwenden möchten. –

+1

Könntest du nicht einfach 'if f.tell()> = 10: tu sonst noch:" Datei ist zu klein "' hier? – theorifice

+2

Dies sind die Ausnahmen für *. –

Antwort

1

es tut aussehen wie Sie aus with verlassen können, aber Sie können es in einer Schleife wickeln, so dass Sie verlassen können - zum Beispiel wie so

for _ in [0]: 
    with open('/etc/passwd', 'r') as f: 
     f.seek(0, 2) 
     if f.tell() < 10: 
      print "The file is too small!" 
      break 

aber propably Ausnahmen verwenden (wie in den Kommentaren erwähnt) oder Wickeln in eine funktion und return ing (ich würde return ing bevorzugen) ist natürlicher.

Verwandte Themen