Para qualquer bloco try-finally possível no Python, é garantido que o finally
bloco será sempre executado?
Por exemplo, digamos que eu retorne enquanto estiver em um except
bloco:
try:
1/0
except ZeroDivisionError:
return
finally:
print("Does this code run?")
Ou talvez eu re-levante um Exception
:
try:
1/0
except ZeroDivisionError:
raise
finally:
print("What about this code?")
O teste mostra que finally
é executado para os exemplos acima, mas imagino que há outros cenários em que não pensei.
Existem cenários nos quais um finally
bloco pode falhar na execução em Python?
finally
não será executado. Ou o mesmo se o computador travar antes: D
finally
não será executado se o cabo de alimentação for arrancado da parede.
finally
falha ao executar ou "anular seu objetivo" é durante um loop infinitosys.exit
ou uma interrupção forçada. A documentação afirma quefinally
sempre é executada, então eu iria com isso.