Este é um código que está se comportando de maneira peculiar. Esta é uma versão simplificada do comportamento que escrevi. Isso ainda demonstrará o comportamento estranho e eu tinha algumas perguntas específicas sobre por que isso está ocorrendo.
Estou usando o Python 2.6.6 no 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 que a demonstração um está retornando 3 em vez de 1?
- Por que o demo dois imprime 6 em vez de imprimir 6 w / 4 ou 5?
fonte
finally
blocos sempre são executados.return
instrução é chamada, o Python verifica se háfinally
cláusulas abertas que precisam ser executadas (consulte a citação acima).A ordem de execução é:
Portanto, qualquer retorno no bloco finally encerrará as etapas antecipadamente.
fonte