Questo è un codice che si comporta in modo particolare. Questa è una versione semplificata del comportamento che ho scritto. Questo dimostrerà ancora il comportamento strano e ho avuto alcune domande specifiche sul perché questo si sta verificando.Weird Try-Except-Else-Finally comportamento con dichiarazioni Return
sto usando Python 2.6.6 su 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
if __name__ == "__main__":
print "*** DEMO ONE ***"
print demo1()
print "****************"
print
print "*** DEMO TWO ***"
print demo2()
print "****************"
Quando si esegue questo script, verrà stampata:
*** DEMO ONE ***
3
****************
*** DEMO TWO ***
6
3
****************
Perché demo uno tornando 3 invece di 1? Perché la demo due stampa 6 invece di stampare 6 con 4 o 5?
Grazie per il vostro aiuto.
perché la stampa 5 non è nel secondo esempio? questo non è ancora ben spiegato, penso. il ritorno è ben risposto, ma perché il 5 nel secondo esempio non stampa –
oh penso di aver capito che il ritorno nel tentativo iniziale lo fa immediatamente saltare verso l'esterno, finalmente –
Esattamente, perché "finalmente" blocca ** sempre ** correre. –