Este es un código que se comporta de manera peculiar. Esta es una versión simplificada del comportamiento que he escrito. Esto todavía demostrará el comportamiento extraño y tenía algunas preguntas específicas sobre por qué ocurre esto.
Estoy usando Python 2.6.6 en Windows 7.
def demo1():
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
def demo2():
try:
try:
raise RuntimeError,"To Force Issue"
except:
return 1
else:
return 2
finally:
return 3
except:
print 4
else:
print 5
finally:
print 6
Resultados:
>>> print demo1()
3
>>> print demo2()
6
3
- ¿Por qué la demostración uno devuelve 3 en lugar de 1?
- ¿Por qué la demostración dos imprime 6 en lugar de imprimir 6 con 4 o 5?
fuente
finally
bloques siempre se ejecutan.return
se llama a la declaración, Python comprueba si hayfinally
cláusulas abiertas que deban ejecutarse (consulte la cita anterior).La orden de ejecución es:
Por lo tanto, cualquier devolución en el bloque finalmente finalizará los pasos por adelantado.
fuente