2011-09-23 27 views
8

Estoy siguiendo Apress, Beginning Python from Novice to Professional libro. Se menciona que:Descripción del libro obsoleta de la declaración Try-Except-Finally

finalmente. Puede usar try/finally si necesita asegurarse de que se ejecute algún código (por ejemplo, código de limpieza) independientemente de si se ha producido o no una excepción . Este código luego se coloca en la cláusula finally . Tenga en cuenta que no puede tener ambas cláusulas except y una cláusula finally en la misma cláusula try, pero puede poner una dentro de la otra.

I probado este código:

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

if __name__ == '__main__': 
    someFunction() 

... y la salida es

Yesss 
integer division or modulo by zero 
Cleanup 

Aquí, he utilizado except y finally en el mismo segmento try, no he ? Y el código funciona bien como se esperaba. ¡No puedo entender lo que dice el libro!

Alguien aclare por favor. Gracias.

+3

Como dice la respuesta aceptada, su libro no está actualizado. De hecho, es más de 5 años desactualizado. Hay * mucho * que ha cambiado en Python en los últimos 5 años. Hazte un favor y compra un libro más reciente. – Duncan

+1

seguro ... lo hará :) – bdhar

+0

Tire todos sus libros y trabaje directamente desde la [documentación] (http://docs.python.org). En particular, tenga en cuenta la versión de Python a la que se aplica cualquier libro/documentación. Asegúrese de leer la nueva lista, en particular, cada versión principal 2.xo 3.x (aunque 2.x ahora se ha estabilizado en 2.7, por lo que es histórico). – smci

Respuesta

14

Esto se ha solucionado desde Python 2.5, y se observa claramente en la documentation

En otras palabras, su libro es incorrecto/fuera de fecha

6

Creo que el libro realmente da el ejemplo en sí mismo, por lo tanto, no sé exactamente qué quiso decir con eso. Como se ha señalado la respuesta anterior, esto fue cambiado en Python 2.5 para que

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

es equivalente a

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

Hasta Python 2.4 que no estaba permitido combinar finalmente con excepción o estado de cuenta más. Pero desde python 2.5, al igual que otros lenguajes de programación orientados a objetos, admite la combinación excepto bloques y un bloque finally. Consulte la documentación más reciente de Python

Cuestiones relacionadas