Maison > Questions et réponses > le corps du texte
In [8]: def bar():
...: a = 10
...: try:
...: raise
...: except:
...: try:
...: raise
...: except:
...: raise
...: finally:
...: return a
In [9]: bar()
Out[9]: 10
天蓬老师2017-04-18 10:30:05
C'est assez intéressant, exécutons d'abord du code
def bar():
a = 10
try:
print 1
raise
except:
print 2
raise
finally:
print 3
return a
bar()
# 打印(没有抛出异常):
# 2
# 3
def bar():
a = 10
try:
print 1
raise
except:
print 2
raise
finally:
print 3
# return a
bar()
# 打印(抛出了异常):
# 2
# Traceback (most recent call last):
# 3
# File "/Users/xuxin/workplace/DailyScript/segmentfault/file_list_to_dict.py", line 23, in <module>
# bar()
# File "/Users/xuxin/workplace/DailyScript/segmentfault/file_list_to_dict.py", line 18, in bar
# raise ValueError()
# ValueError
Il semble qu'après que f() ait lancé une exception, il exécute le retour dans except, mais il ne revient pas à l'appelant, mais "persiste" dans l'exécution du code dans finalement. À ce stade, je comprends enfin le vrai sens definally, c'est-à-dire que même si le retour a été effectué, le code final doit quand même être exécuté.
On peut aussi comprendre ici que s'il y a une instruction qui nécessite une méthode de sortie dans try, elle tentera de s'exécuter finalement. Si elle a finalement une méthode de retour, elle reviendra immédiatement et l'instruction de sortie précédente ne sera pas exécutée.
À ce stade, nous pouvons jeter un œil à cette chaîne de code
def bar():
a = 10
try:
print 1
raise
finally:
print 3
return a
bar()
# 打印(没有抛出异常):
# 3
Apprenez maintenant et vendez maintenant. S'il y a des erreurs, veuillez signaler la correction~
ringa_lee2017-04-18 10:30:05
Si une exception est levée à la fin, votre instruction except n'est-elle pas vaine ?