Para qualquer bloco try-finally possível no Python, é garantido que o finallybloco será sempre executado?
Por exemplo, digamos que eu retorne enquanto estiver em um exceptbloco:
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 finallybloco pode falhar na execução em Python?
finallynão será executado. Ou o mesmo se o computador travar antes: D
finallynão será executado se o cabo de alimentação for arrancado da parede.
finallyfalha ao executar ou "anular seu objetivo" é durante um loop infinitosys.exitou uma interrupção forçada. A documentação afirma quefinallysempre é executada, então eu iria com isso.