2011-09-23 14 views
8

Sto seguendo Apress, Beginning Python from Novice to Professional book. Si dice che:Descrizione libro obsoleto di Try-Except-Finally statement

infine. È possibile utilizzare try/finally se è necessario assicurarsi che qualche codice (ad esempio, codice cleanup) venga eseguito indipendentemente dal fatto che venga sollevata o meno un'eccezione . Questo codice viene quindi inserito nella clausola finally . Si noti che non è possibile avere entrambe le clausole tranne la clausola finally nella stessa istruzione try, ma è possibile inserirne una all'interno dell'altra.

ho provato questo codice:

def someFunction(): 
    a = None 
    try: 
     a = 1/0 
    except ZeroDivisionError, e: 
     print 'Yesss' 
     print e 
    finally: 
     print 'Cleanup' 
     del a 

if __name__ == '__main__': 
    someFunction() 

... e l'uscita è

Yesss 
integer division or modulo by zero 
Cleanup 

Qui, ho usato except e finally nella stessa try segmento, non ho io ? E il codice funziona bene come previsto. Non riesco a capire cosa dice il libro!

Qualcuno si prega di chiarire. Grazie.

+3

Come dice la risposta accettata, il tuo libro non è aggiornato. In effetti è più di 5 anni non aggiornato. C'è molto * che è cambiato in Python negli ultimi 5 anni. Fatti un favore e compra un libro più recente. – Duncan

+1

sicuro .. lo farà :) – bdhar

+0

Elimina tutti i tuoi libri e lavora direttamente dalla [documentazione] (http://docs.python.org). In particolare, si noti la versione di Python per cui si applica qualsiasi libro/documentazione. Assicurati di sfogliare la lista di whatsnew, in particolare tutte le versioni 2.x o 3.x principali (anche se 2.x ora si è stabilizzato su 2.7, quindi questo è storico). – smci

risposta

14

Questo è stato risolto dal momento che Python 2.5, ed è chiaramente indicato nella documentation

In altre parole, il tuo libro non è corretta/non aggiornati

1

Questo libro potrebbe essere sbagliato, temo, come il Python documentation utilizza tutti e tre. Forse è ora di prendere un nuovo libro?

6

Credo che il libro dia effettivamente l'esempio stesso, quindi non so cosa intendesse esattamente. Come la risposta precedente notato, questo è stato cambiato in Python 2.5 in modo che

try: 
    try: 
     print 'something' 
    except: 
     print 'some weird error' 
finally: 
    print 'finally something 

equivale a

try: 
    print 'something' 
except: 
    print 'some weird error' 
finally: 
    print 'finally' 
0

Fino Python 2.4 non è stato permesso di coniugare, infine, con eccezione o else. Ma dal momento che Python 2.5, come altri linguaggi di programmazione orientati agli oggetti, supporta la combinazione, tranne i blocchi e infine un blocco. Fare riferimento alla documentazione python più recente