Dies ist ein Code, der sich besonders verhält. Dies ist eine vereinfachte Version des Verhaltens, das ich geschrieben habe. Dies wird immer noch das seltsame Verhalten demonstrieren und ich hatte einige spezifische Fragen, warum dies geschieht.
Ich verwende Python 2.6.6 unter Windows 7.
def demo1():
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
def demo2():
try:
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
except:
print 4
else:
print 5
finally:
print 6
Ergebnisse:
>>> print demo1()
3
>>> print demo2()
6
3
- Warum gibt Demo 1 3 statt 1 zurück?
- Warum druckt Demo 2 6 statt 6 mit 4 oder 5?
quelle
finally
Blöcke laufen.return
Anweisung aufgerufen wird, sucht Python nach offenenfinally
Klauseln, die ausgeführt werden müssen (siehe obiges Zitat).Die Ausführungsreihenfolge lautet:
Jede Rückkehr im finally-Block beendet die Schritte im Voraus.
quelle