2010-05-08 4 views
18

Je me demandais si, en python, il y avait un moyen simple d'exécuter du code si une instruction try réussissait et ne figurait pas dans l'instruction try elle-même. Est-ce ce que font les commandes else ou finally (je n'ai pas compris leur documentation)? Je sais que je pourrais utiliser un code comme celui-ci:code en cours d'exécution si les instructions try ont été réussies en python

successful = False 
try: 
    #code that might fail 
    successful = True 
except: 
    #error handling if code failed 
if successful: 
    #code to run if try was successful that isn't part of try 

mais je me demandais s'il y avait un moyen plus court.

+2

L'utilisation de 'except:' est une mauvaise idée. Il est préférable de faire 'excepté SomeSpecificError:' et de gérer une exception spécifique dont vous savez quoi faire. 'except:' capture toutes sortes d'exceptions que vous n'espérez pas, y compris des choses comme manquer de mémoire ou l'utilisateur en appuyant sur ctrl-C. –

Répondre

30

Vous voulez « autre »:

for i in [0, 1]: 
    try: 
     print '10/%i: ' % i, 10/i 
    except: 
     print 'Uh-Oh' 
    else: 
     print 'Yay!' 
+0

Yay! Je l'ai finalement corrigé, mon code a continué d'imprimer le succès bien que l'exception se produise mais maintenant je sais que vous pouvez utiliser 'else' après' exept'. – answerSeeker

11

Vous cherchez le else mot-clé:

try: 
    #code that might fail 
except SomeException: 
    #error handling if code failed 
else: 
    # do this if no exception occured 
-3

Votre bloc devrait essayer le code que vous voulez exécuter, et votre exception devrait être tué le programme. Je devrais mieux comprendre votre objet pour donner une meilleure réponse.

Dans la programmation OO, vous voulez "Tell, ne demandez pas" alors gardez toute la logique qui devrait arriver dans le bloc try, puis la gestion des erreurs dans le bloc except.

+2

Je ne pense pas que je suis d'accord avec cette réponse. "votre sauf devrait tuer le programme" est particulièrement difficile à avaler; Nous avons une gestion des exceptions, donc nous pouvons gérer les exceptions. Cela est particulièrement vrai en Python où les exceptions sont utilisées généreusement et pour des choses comme terminer l'itération sur un itérateur, un événement qui 99% du temps n'est pas une condition de fin de programme. Je ne viendrais nulle part près d'un rejet général d'autres blocs sur essayer/sauf, où seulement sur le succès, vous continuez à faire quelque chose. Entre autres choses, d'autres aide souvent à essayer des blocs courts, ce qui est génial. –

+0

Vous avez absolument raison. J'ai écrit du code de test pour les 3 dernières semaines et je l'ai abordé du point de vue que si quelque chose échoue, je veux que le framework de test le sache. J'ai toujours du mal à trouver un autre bloc, il semble perturber le flux de "Essayez de faire cette chose ... Si ça échoue, maniez-le" Tout ne devrait pas se passer dans le cas où est pas un échec dans la section "Essayez de faire ce truc"? Maintenant, vous avez ici la logique, puis l'interruption de la logique, et ensuite la logique après l'interruption qui devrait se produire SEULEMENT si l'interruption ne se produit pas ... –

Questions connexes