Questão nº 38

Questão de Tecnologia da Informação · FGV ALEP 2024 (nº 38)

FGV2024Analista Legislativo - Desenvolvedor de SistemasTecnologia da Informação
Gabarito: Ever comentário ↓

Considere o código a seguir que é usado para capturar a sintaxe de diversos tipos de frase a ser usado.

Figura da questão de Tecnologia da Informação

A saída correta desse código é

Vai
Vai
Você

Resposta comentada

Gabarito Alternativa E

O conceito-chave aqui é como a função exec() do Python interpreta strings de código e como as f-strings (formatted string literals) interpolam valores. exec() tenta executar uma string como se fosse código Python, e se essa string não for sintaticamente válida ou referenciar nomes não definidos, ela levantará um erro. As f-strings inserem o valor de uma variável diretamente na string, sem adicionar aspas automaticamente, o que pode levar a problemas de sintaxe quando o valor é uma frase.

  • (A) Incorreta: Esta seria a saída se exec('print("vou a praia")') fosse executado, mas a forma como a f-string é usada gera um SyntaxError.
  • (B) Incorreta: Esta não é a saída completa do programa, nem a resposta correta para a questão.
  • (C) Incorreta: Esta não é a saída completa do programa, nem a resposta correta para a questão.
  • (D) Incorreta: Esta não é a saída completa do programa, nem a resposta correta para a questão.
  • (E) Correta: O código retorna erro no sentido de que as chamadas à função exec() levantam exceções (SyntaxError ou NameError), mesmo que essas exceções sejam capturadas e tratadas pelos blocos try-except. A pegadinha da banca é que a questão afirma a saída real do código ("Vai\nVai\nVocê"), mas essa saída não é uma das alternativas. Em vez disso, a alternativa correta se refere ao fato de que erros são gerados internamente durante a execução do exec(), mesmo que o programa não "crashe" e imprima as mensagens dos blocos except.
    • Quando capture_syntax("vou a praia") é chamado, exec(f'print({frase})') se torna exec('print(vou a praia)'). Isso gera um SyntaxError porque vou a praia não é um argumento válido para print() sem aspas ou sendo uma variável definida. O bloco except SyntaxError é ativado, imprimindo "Vai".
    • Similarmente, para capture_syntax("vai"), exec('print(vai)') também gera um SyntaxError, imprimindo "Vai".
    • Para capture_syntax("Eu"), exec('print(Eu)') gera um NameError (assumindo que Eu não é uma variável definida). Um NameError é uma Exception geral, mas não um SyntaxError. Portanto, o bloco except Exception é ativado, imprimindo "Você".
    • Assim, o código realmente imprime "Vai\nVai\nVocê", mas como essa opção não está disponível, a alternativa "Retorna erro" é a mais adequada, indicando que a execução do código dentro do exec() falha, levantando exceções que são então tratadas.

Fonte: FGV ALEP 2024 Analista Legislativo - Desenvolvedor de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho