1
resposta

Duvida na sintaxe da função try

Escrevi o seguinte código:

notas = {'João': [8.0, 9.0, 10.0], 'Maria': [9.0, 7.0, 6.0], 'José': [3.4, 7.0, 8.0], 'Cláudia': [5.5, 6.6, 8.0],
 'Ana': [6.0, 10.0, 9.5], 'Joaquim': [5.5, 7.5, 9.0], 'Júlia': [6.0, 8.0, 7.0], 'Pedro': [3.0, 4.0, 6.0]}
 
try:
  nome = input('Digite o nome do estudante: ')
except KeyError:
  print(f'O aluno "{nome}" não está na lista da turma')
else:
  print(notas[nome])

Quando faço um teste com nome que não está na lista de notas, ele não roda o print do except como deveria. Mas, se eu armazenar o notas[nome] em uma variável, como foi feito na aula, esse erro não acontece (como mostrado no código abaixo). Por que isso ocorre?

notas = {'João': [8.0, 9.0, 10.0], 'Maria': [9.0, 7.0, 6.0], 'José': [3.4, 7.0, 8.0], 'Cláudia': [5.5, 6.6, 8.0],
 'Ana': [6.0, 10.0, 9.5], 'Joaquim': [5.5, 7.5, 9.0], 'Júlia': [6.0, 8.0, 7.0], 'Pedro': [3.0, 4.0, 6.0]}
 
try:
  nome = input('Digite o nome do estudante: ')
  resultado = notas[nome]
except KeyError:
  print(f'O aluno "{nome}" não está na lista da turma')
else:
  print(resultado)
1 resposta

Olá, Pedro!

Sua dúvida é muito interessante e comum quando estamos aprendendo sobre tratamento de exceções em Python.

No primeiro exemplo de código que você compartilhou, a exceção KeyError não é capturada porque ela não está ocorrendo dentro do bloco try. O Python executa o código dentro do bloco try e se ocorrer alguma exceção, ele irá procurar no bloco except correspondente para tratar essa exceção.

No seu caso, a linha nome = input('Digite o nome do estudante: ') está dentro do bloco try, mas a linha print(notas[nome]) está fora. Então, quando o Python tenta executar print(notas[nome]) e encontra um KeyError, ele não sabe como lidar com isso, pois a exceção ocorreu fora do bloco try.

No segundo exemplo, você colocou a linha resultado = notas[nome] dentro do bloco try. Então, quando ocorre um KeyError, o Python consegue capturar essa exceção e executar o bloco except correspondente.

Aqui está uma versão corrigida do seu primeiro exemplo de código:

notas = {'João': [8.0, 9.0, 10.0], 'Maria': [9.0, 7.0, 6.0], 'José': [3.4, 7.0, 8.0], 'Cláudia': [5.5, 6.6, 8.0],
 'Ana': [6.0, 10.0, 9.5], 'Joaquim': [5.5, 7.5, 9.0], 'Júlia': [6.0, 8.0, 7.0], 'Pedro': [3.0, 4.0, 6.0]}
 
try:
  nome = input('Digite o nome do estudante: ')
  print(notas[nome])
except KeyError:
  print(f'O aluno "{nome}" não está na lista da turma')

Espero ter ajudado e bons estudos!