2017-03-04 2 views
0

exécutant le code suivant:enfin l'expression en python

click here

j'ai eu la sortie suivante:

3 ok ok 6 oops ok ok Boom

Je ne comprends pas pourquoi imprime-t-il le gras en gras? il n'entrera même pas dans la boucle.

Je voudrais obtenir en profondeur comprendre comment les exceptions et finalement en particulier fonctionne.

Merci d'avance!

+1

Vous ne devriez pas montrer votre code dans une image. Il est plus difficile de vous aider, car quiconque essaie de vous aider devrait écrire votre code à la main. – elbaulp

+2

N'inclut pas le code ** dans la question elle-même ** (mais seulement derrière un lien) satisfait réellement les conditions de close-as-lacking-MCVE. Selon le libellé de la règle: * Les questions qui cherchent l'aide au débogage («pourquoi ce code ne fonctionne-t-il pas?») Doivent inclure le comportement souhaité, un problème ou une erreur spécifique et le code le plus court nécessaire pour le reproduire ** *. * –

Répondre

1

le code est toujours exécuté avant de quitter le bloc try-catch. Le code du bloc finally est exécuté même si une exception est interceptée.

Pour une explication détaillée de exception handling en python, voir python 3 documentation

0

Le official spec est

Si finalement est présent, il spécifie un gestionnaire de « nettoyage ». La clause try est exécutée, y compris les clauses except et else. Si une exception se produit dans l'une des clauses et n'est pas gérée, l'exception est temporairement enregistrée. La clause finally est exécutée. S'il existe une exception enregistrée, elle est sur-relancée à la fin de la clause finally. Si la clause finally déclenche une autre exception, l'exception enregistrée est définie en tant que contexte de la nouvelle exception. Si la clause finally exécute une instruction de retour ou la rupture, l'exception enregistrée est mis au rebut:

Alors qu'est-ce qui se passe dans la quatrième itération de la boucle est number est réglé sur "a" et lorsque vous essayez de le convertir en int une exception est élevé. Comme il n'y a pas de except correspondant dans le bloc try interne, l'exception est sauvegardée, le bloc finally est exécuté ce qui donne la quatrième sortie ok et l'exception sauvegardée est sur-relancée et interceptée par le bloc externe try.