43 votes

Pourquoi la clause `continue` n'est pas autorisée dans une clause `finally` en Python ?

Le code suivant soulève une erreur de syntaxe :

>>> for i in range(10):
...     print i
...     try:
...        pass
...     finally:
...        continue
...     print i
...
  File "<stdin>", line 6
SyntaxError: 'continue' not supported inside 'finally' clause

Pourquoi n'y a-t-il pas un continue autorisée à l'intérieur d'un finally clause ?

P.S. Cet autre code, par contre, n'a aucun problème :

>>> for i in range(10):
...     print i
...     try:
...        pass
...     finally:
...        break
...
0

Si cela a une importance, j'utilise Python 2.6.6.

2voto

jathanism Points 15208

Je ne l'ai pas vu mentionné dans une autre réponse, mais je pense que ce que vous pourriez vouloir dans ce cas est try..else :

for i in range(10):
    print i
    try:
       #pass <= I commented this out!
       do_something_that_might_fail(i)
    except SomeException:
       pass
    else:
       continue
    print i

En else n'est exécuté que s'il n'y a pas eu d'exception. Donc, ce que cela signifie est :

  1. Nous print i
  2. Nous try a do_something_that_might_fail(i)
  3. S'il jette SomeException , tomber à l'eau et print i à nouveau
  4. Sinon, nous continue (et i n'est jamais imprimé)

-1voto

SarthAk Points 578

Cette fonctionnalité est désormais disponible avec la version 3.8.

https://docs.python.org/3/whatsnew/3.8.html

Exemple de code

def new_f():
    for i in range(0,24):
        try:
            print(1/0)
        except:
            print('In Exception')
        finally:
            print('In finally')
            continue

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X