Veuillez vous référer au code suivant:
import sys
def x():
try:
y()
except:
print("exception caught")
def y():
sys.exit()
x()
Dans ce cas, la boucle try dans la fonction x () sera reportée sur la fonction y () , provoquant l'exécution de la boucle except en raison de sys.exit () soulevant une erreur. Je sais, nous pouvons le changer pour lever SystemExit pour le quitter, mais y a-t-il un moyen de sortir de la boucle try ou existe-t-il une meilleure façon d'écrire ce code?
Merci d'avoir lu et merci à l'avance.
3 Réponses :
Vous pouvez écrire sauf Exception , il interceptera toutes les exceptions apparaissant couramment dans votre code, mais pas l'exception SystemExit car il n'hérite pas de Exception < / code>, il hérite de BaseException
En général, c'est une mauvaise idée d'utiliser simplement sauf sans attraper d'erreurs ... Donc mon conseil est d'aller dans l'autre sens que vous mentionnez, comme ceci:
import sys
def x():
try:
y()
except SystemExit:
print("exception caught")
def y():
sys.exit()
x()
Oui, c'est une meilleure idée, mais cela poserait-il des problèmes, comme une boucle d'essai imbriquée ou cela n'existe-t-il pas?
Non, cela ne poserait aucun problème. Il n'y a pas de boucle dans ce code. La clause try ne "boucle" sur aucun code plusieurs fois, il n'y a donc aucune chance de se retrouver dans une boucle infinie si c'est ce que vous voulez dire.
Je pense que vous voulez sortir du bloc try sans vous faire prendre par except block, pour cela simplement
import sys
def x():
try:
y()
except as e:
if e is SystemExit:
print("exception caught")
def y():
raise SystemExit
x()
au lieu de
except:
Voici le code complet:
except Exception as e:
FYI: Il n'y a pas de boucles. Les boucles sont des constructions qui exécutent le même code plusieurs fois. Vous avez
tryetsaufclauses (que d'autres personnes pourraient appeler des blocs ou des corps).