python - 为什么这段代码没有异常抛出?
天蓬老师
天蓬老师 2017-04-18 10:28:05
0
2
460
In [8]: def bar():
   ...:     a = 10
   ...:     try:
   ...:         raise
   ...:     except:
   ...:         try:
   ...:             raise
   ...:         except:
   ...:             raise
   ...:     finally:
   ...:         return a


In [9]: bar()
Out[9]: 10
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

répondre à tous(2)
Peter_Zhu

C'est assez intéressant, exécutons d'abord du code

1. Ce code signifie que vous n'avez pas à vous soucier du nombre de couches d'essai dont vous disposez. En fait, il vous suffit de comprendre pourquoi les exceptions ne sont pas levées, sauf
.
def bar():
    a = 10
    try:
        print 1
        raise
    except:
        print 2
        raise
    finally:
        print 3
        return a

bar()
# 打印(没有抛出异常): 
# 2
# 3
2. Ce code signifie que si finalement il y a une instruction return, aucune exception ne sera levée. S'il n'y a pas de retour, une exception sera levée
.
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
3. Je l'ai vérifié et vu cet article pour enfin comprendre Python.

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
4. À ce stade, êtes-vous plus clair sur finalement~

Apprenez maintenant et vendez maintenant. S'il y a des erreurs, veuillez signaler la correction~

左手右手慢动作

Si une exception est levée à la fin, votre instruction except n'est-elle pas vaine ?

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!