Considere o seguinte trecho de código em Python, executado n...
Fonte: dados do elaborador
Com base nas regras de tratamentos de exceção em Python, assinale a alternativa que apresenta CORRETAMENTE a saída produzida pela execução do código:
Comentários
Veja os comentários dos nossos alunos
Gabarito: A
Ao executar a operação x = 5 / 0, o Python gera uma exceção do tipo ZeroDivisionError.
O fluxo de tratamento de exceções ocorre da seguinte forma:
- O Python avalia os blocos except na ordem em que foram escritos.
- O primeiro bloco é except TypeError:. Como a exceção gerada é um ZeroDivisionError (e não TypeError), esse bloco é ignorado.
- O segundo bloco é except Exception:. Como Exception é a classe-pai generica da qual ZeroDivisionError herda, a exceção é capturada aqui. O programa executa print("002") e interrompe a busca por outros blocos except.
- Por ter sido capturada no segundo bloco, o terceiro bloco (except ZeroDivisionError:) nem chega a ser avaliado.
- O bloco finally: é sempre executado, independentemente de ter ocorrido erro ou de qual erro foi capturado. Portanto, ele executa print("004").
Dessa forma, as saídas produzidas são "002" e "004".
- A ("002" e "004"): Correta. O erro é capturado pelo bloco genérico Exception primeiro e o bloco finally é executado ao final.
- B ("001" e "003"): Incorreta. Não ocorre TypeError (001) e o bloco específico ZeroDivisionError (003) é ignorado por ter sido capturado antes pela classe genérica.
- C ("003" e "004"): Incorreta. Embora o erro seja de divisão por zero, a ordem dos blocos faz com que Exception capture o erro antes que o código chegue na linha do ZeroDivisionError.
- D ("001" e "002"): Incorreta. Não ocorre TypeError e o bloco finally (004) obrigatoriamente roda.
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo