2010-10-22 7 views
3

Possible en double:
Python try-elseclause else dans la déclaration try ... ce qui est bon pour

Comming à partir d'un arrière-plan Java, je ne suis pas tout à fait ce que la clause else Est bon pour.

Selon les docs

Il est utile pour le code qui doit être exécuté si la clause d'essai ne déclenche une exception.

Mais pourquoi ne pas mettre le code après le bloc try? Il semble im manque quelque chose d'important ...

+3

Ce problème a été abordé dans cette question: http://stackoverflow.com/questions/855759/python-try-else –

+2

Alors que beaucoup de gens ont étiqueté cela comme un dup de la question ci-dessus, il ne semble pas vraiment pour répondre à la différence que l'OP pose ici, c'est-à-dire entre mettre * après * le bloc try et dans la clause else. La réponse d'AndrewBC ci-dessous répond beaucoup mieux. Ma contribution http://stackoverflow.com/a/22579805/1503120 peut également être utile. – jamadagni

Répondre

10

La clause else est particulièrement utile car vous savez alors que le code de la suite try a abouti. Par exemple:

for arg in sys.argv[1:]: 
    try: 
     f = open(arg, 'r') 
    except IOError: 
     print 'cannot open', arg 
    else: 
     print arg, 'has', len(f.readlines()), 'lines' 
     f.close() 

Vous pouvez effectuer des opérations sur f en toute sécurité, parce que vous savez que sa mission a réussi. Si le code était simplement après l'essai ... sauf, vous ne pouvez pas avoir un f.

3

Tenir compte

try: 
    a = 1/0 
except ZeroDivisionError: 
    print "Division by zero not allowed." 
else: 
    print "In this universe, division by zero is allowed." 

Que se passerait-il si vous mettez la deuxième print en dehors du bloc try/except/else?

+0

Il est également préférable de le mettre après l'affectation à 'a', avant le' except' -qui serait équivalent à cet exemple- car il empêche l'interception d'exceptions indésirables. – intuited

2

C'est pour le code que vous voulez exécuter seulement lorsqu'aucune exception n'a été levée.