Observe o seguinte programa:
Um dos problemas do código acima é que o mesmo além de possuir um erro lógico (execução de um comando de escrita em um arquivo em modo de leitura), abre um arquivo e tem a sua execução encerrada.
Incremente o código apresentado liberando da memória a referência do arquivo tanto nos casos de erro, quanto em execuções bem-sucedidas (caso o mesmo fosse aberto em modo de escrita).
Passo 1
Bom, a primeira coisa que devemos fazer é analisar o que o enunciado quer que nós façamos.
Quando o mesmo diz que devemos liberar da memória a referência do arquivo aberto, ele está nos dizendo que devemos utilizar a função close. Porém, isso deve ser feito “tanto nos casos de erro, quanto em execuções bem-sucedidas (caso o mesmo fosse aberto em modo de escrita).”
Passo 2
Sendo assim, podemos utilizar o comando finally, uma vez que ele será sempre executado, ou seja, tanto quando o bloco try não gerar exceções, quanto após a execução de algum bloco except.
Resposta
Portanto, após o incremento do bloco finally o programa ficará da seguinte forma: