2011-12-20 7 views
13

¿Por qué la excepción en foo pasa desapercibida, pero se produce la excepción en bar?python try-finally

def foo(): 
    try: 
     raise Exception('foo') 
    finally: 
     return 

def bar(): 
    try: 
     raise Exception('bar') 
    finally: 
     pass 

foo() 
bar() 
+5

duplicado de [come come excepción] (http://stackoverflow.com/questions/517060/return-eats-exception) – gecco

Respuesta

19

Desde el Python documentation:

Si la cláusula finalmente plantea otra excepción o ejecuta una instrucción de retorno o rotura, se pierde la excepción salvado.

+1

¡Interesante! ¿A dónde va ', si esa pregunta tiene sentido? – wim

+5

@wim: Supongo que va donde las variables locales van al final de la función. Una forma de verlo es que la excepción se vuelve a subir al final del bloque 'finally'. Como el 'return' se salta el resto del bloque' finally', no se vuelve a generar la excepción. – interjay