C'est un code qui se comporte de façon particulière. Ceci est une version simplifiée du comportement que j'ai écrit. Cela démontrera toujours le comportement étrange et j'avais des questions spécifiques sur la raison pour laquelle cela se produit.
J'utilise Python 2.6.6 sur 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
Résultats:
>>> print demo1()
3
>>> print demo2()
6
3
- Pourquoi la démonstration 1 renvoie-t-elle 3 au lieu de 1?
- Pourquoi la démo deux imprime-t-elle 6 au lieu d'imprimer 6 w / 4 ou 5?
la source
finally
blocs fonctionnent toujours .return
instruction est appelée, Python vérifie toutes lesfinally
clauses ouvertes qui doivent être exécutées (voir la citation ci-dessus).L'ordre d'exécution est:
Ainsi, tout retour dans le bloc finally mettra fin aux étapes à l'avance.
la source