2010-08-02 45 views
9

He encontrado este artículo interesante en un blog hoy:¿Por qué hace esto lo que hace?

def abc(): 
    try: 
     return True 
    finally: 
     return False 

print "abc() is", abc() 

Puede alguien explicar por qué hace lo que hace?

Gracias, KR

+0

Aunque no es exactamente lo mismo, se puede encontrar una buena discusión de esto aquí: http://stackoverflow.com/questions/1611561/python-error-handling-with-try-finally – dave

+0

-1: did ni siquiera intentes buscar la declaración final en http://docs.python.org/reference/compound_stmts.html#the-try-statement –

Respuesta

10

Si el bloque finally contiene una declaración return o break el resultado de la intente bloque se descarta

Se explica en detalle en el python docu

+0

aww me ganaste :) –

0

Gracias por el puntero a los documentos. No pude pasar el 'retorno verdadero' para siquiera pensar en buscar allí.

de la documentación lee:

Si finalmente está presente, especifica un manejador ‘limpieza’. La cláusula try es ejecutada, ...

lo que sugiere que se ejecuta la vuelta al Verdadero. Sin embargo, esto se aclaró más tarde:

Cuando una devolución, romper o continuar sentencia se ejecuta en la suite intento de una declaración tratar ... Por último, el finalmente también se ejecuta la cláusula 'en el camino out. '

Lo que explica el comportamiento observado.

¿Qué tipo de mente pensaría en un código como este en primer lugar? ;)

Cuestiones relacionadas