Questão nº 25
Questão de Tecnologia da Informação · FCC TRT23 2022 (nº 25)
Considere o programa abaixo que, completo, pode ser executado em condições ideais.
```
n1 = int(input("Insira n1: "))
n2 = int(input("Insira n2: "))
try:
divisao = n1 / n2
print(divisao)
except ZeroDivisionError as erro:
print("Insira valores válidos. Erro: ", erro)
I
print("Os dois valores são válidos para a divisão.")
finally:
print("Fim do programa")
```
É correto afirmar:
- AComo o código é PHP, a lacuna I deve ser preenchida com `catch:`
- BDe acordo com a linguagem do programa, a lacuna I deve ser preenchida com `throw:`
- CCom o programa completo e executado, ao se inserirem os valores 5 e 0 para `n1` e `n2`, respectivamente, serão impressos:
```
Insira valores válidos. Erro: division by zero
Fim do programa
``` (alternativa correta) - DCom o programa completo e executado, ao se inserirem os valores 6.4 e 2 para `n1` e `n2`, respectivamente, serão impressos:
```
3.2
Os dois valores são válidos para a divisão.
Fim do programa
``` - ECom a lacuna I preenchida com `else:`, ao se inserirem os valores 0 e 10 para `n1` e `n2`, respectivamente, serão impressos:
```
Insira valores válidos. Erro: division by zero
Fim do programa
```
Resposta comentada
Gabarito Alternativa C
Em Python, o bloco try-except-else-finally é uma ferramenta essencial para lidar com erros (exceções) que podem surgir durante a execução de um programa. O código dentro do try é executado; se ocorrer um erro, o except correspondente é acionado. Se não houver erro, o else é executado. O finally é sempre executado, independentemente de ter ocorrido ou não um erro.
- (A) Incorreta: O código está em Python, não em PHP. Em Python, usa-se
exceptpara capturar exceções, nãocatch:. - (B) Incorreta: Em Python, a palavra-chave para levantar (gerar) uma exceção é
raise, nãothrow:. A lacunaIestaria em um contexto de tratamento de exceção, não de levantamento. - (C) Correta: Ao inserir
n1 = 5en2 = 0, a operaçãon1 / n2no blocotrygera umZeroDivisionError. O blocoexcept ZeroDivisionErrorcaptura esse erro, imprime a mensagem "Insira valores válidos. Erro: division by zero". O código dentro da lacunaI(sejaelseou outra coisa) não é executado porque uma exceção ocorreu e foi tratada. Finalmente, o blocofinallyé executado, imprimindo "Fim do programa". - (D) Incorreta: A função
int(input(...))converte a entrada para um número inteiro. Se6.4fosse inserido, ocorreria umValueErrorantes mesmo da divisão. Sen1fosse6en2fosse2, o resultado da divisão seria3.0, não3.2. Além disso, a linha "Os dois valores são válidos para a divisão." só seria impressa se a lacunaIfosse um blocoelse:e nenhuma exceção ocorresse. - (E) Incorreta: (Armadilha da banca!) Se a lacuna
Ifor preenchida comelse:, e forem inseridosn1 = 0en2 = 10, a divisão0 / 10resulta em0.0e não gera umZeroDivisionError. Como não há erro, o blocoexcepté ignorado. O programa imprimiria0.0, em seguida a mensagem do blocoelse("Os dois valores são válidos para a divisão."), e por último a mensagem dofinally("Fim do programa"). A alternativa prevê a saída do blocoexcept, o que está errado.
Fonte: FCC TRT23 2022 Técnico Judiciário - Área Apoio Especializado - Especialidade Tecnologia da Informação (Caderno Tipo 1). Reproduzida para fins de estudo.