To jest kod, który zachowuje się dziwnie. To jest uproszczona wersja zachowania, które napisałem. To nadal pokaże dziwne zachowanie i miałem kilka konkretnych pytań, dlaczego tak się dzieje.
Używam Pythona 2.6.6 w systemie 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
Wyniki:
>>> print demo1()
3
>>> print demo2()
6
3
- Dlaczego wersja demo 1 zwraca 3 zamiast 1?
- Dlaczego wersja demonstracyjna 2 drukuje 6 zamiast drukowania 6 w / 4 lub 5?
źródło
finally
bloki zawsze biegną.return
wywołaniu instrukcji Python sprawdza, czy nie ma otwartychfinally
klauzul, które muszą zostać wykonane (zobacz cytat powyżej).Kolejność wykonania to:
Tak więc każdy powrót w ostatnim bloku kończy kroki z góry.
źródło