OVH Cloud OVH Cloud

Question sur try/except/finally

5 réponses
Avatar
Eric Jacoboni
Bonjour,

En Python, pour quelque obscure raison, il semble qu'on ne puisse pas
à la fois utiliser une clause except et une clause finally dans un
bloc try.

Comment peut-on faire alors pour qu'un certain code s'exécute à chaque
fois qu'on sort d'un bloc, que ce soit normalement ou par une
exception ?

En gros, je voudrais pouvoir faire ça (l'équivalent, en tous cas) :

try:
# tentative d'ouverture du fichier
# tentative de manipulation du fichier
except bla:
...
except bli:
...
finally:
# fermer le fichier s'il est ouvert

--
Eric Jacoboni, ne il y a 1443982782 secondes

5 réponses

Avatar
Hervé Cauwelier
Bonjour,

En Python, pour quelque obscure raison, il semble qu'on ne puisse pas
à la fois utiliser une clause except et une clause finally dans un
bloc try.


J'avais vu un PEP ouvert pour faire modifier Python mais pas de nouvelle
depuis.

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
fraca7
Bonjour,

En Python, pour quelque obscure raison, il semble qu'on ne puisse pas
à la fois utiliser une clause except et une clause finally dans un
bloc try.


Il me semble que c'est parce qu'il y aurait une ambiguïté sur lequel des
deux blocs devrait s'exécuter en premier en cas d'exception mais je ne
suis pas sûr...

Comment peut-on faire alors pour qu'un certain code s'exécute à chaque
fois qu'on sort d'un bloc, que ce soit normalement ou par une
exception ?

En gros, je voudrais pouvoir faire ça (l'équivalent, en tous cas) :

try:
# tentative d'ouverture du fichier
# tentative de manipulation du fichier
except bla:
...
except bli:
...
finally:
# fermer le fichier s'il est ouvert


try:
try:
# ouverture
# manip
except bla:
...
except bli:
...
finally:
# etc...

Cela dit je trouve que c'est moche de vérifier si le fichier est ouvert
pour le fermer... D'habitude je fais plutôt ça comme ça:

try:
# ouverture
try:
# manip
except bla:
# pb de manip
except:
# pb d'ouverture
else:
# fermeture, on est sûr qu'il est ouvert

mais bon les goûts et les couleurs...

Avatar
fraca7
Bonjour,

En Python, pour quelque obscure raison, il semble qu'on ne puisse pas
à la fois utiliser une clause except et une clause finally dans un
bloc try.


Il me semble que c'est parce qu'il y aurait une ambiguïté sur lequel des
deux blocs devrait s'exécuter en premier en cas d'exception mais je ne
suis pas sûr...



Non en fait je crois me souvenir, c'est parce que ça mélangerait des
constructions qui ont des buts différents: except (gestion d'erreur) et
finally (gestion de ressources). Cela dit, comme ils utilisent déjà tous
les deux 'try'...


Avatar
Amaury Forgeot d'Arc
Bonjour,

En Python, pour quelque obscure raison, il semble qu'on ne puisse pas
à la fois utiliser une clause except et une clause finally dans un
bloc try.


Il me semble que c'est parce qu'il y aurait une ambiguïté sur lequel
des deux blocs devrait s'exécuter en premier en cas d'exception mais
je ne suis pas sûr...



Non en fait je crois me souvenir, c'est parce que ça mélangerait des
constructions qui ont des buts différents: except (gestion d'erreur) et
finally (gestion de ressources). Cela dit, comme ils utilisent déjà tous
les deux 'try'...



En fait, c'est déjà implémenté, et c'est pour la prochaine version 2.5.
(http://www.python.org/peps/pep-0341.html)



Avatar
fraca7

En fait, c'est déjà implémenté, et c'est pour la prochaine version 2.5.
(http://www.python.org/peps/pep-0341.html)


Tiens donc, il faut que je me tienne au courant... Pas sûr d'apprécier
cela dit...