Apanhar um erro
As linhas que podem parar ficam debaixo de try. except nomeia a parada que você vai tratar. except ZeroDivisionError só corre quando a parada dentro de try tem esse nome. Depois de try e except inteiros, o programa segue.
try:
print(1 / 0)
print("rice")
except ZeroDivisionError:
print("skip")
print("done")
Na tela aparece skip, depois done. print(1 / 0) para dentro de try. print("rice") ainda está dentro de try, então não corre. Apanhar a parada não volta para terminar o resto de try. except escreve skip. print("done") está fora, então corre depois de apanhar. O programa não acaba nessa parada.
O nome tem de bater. Ponha print(tea) dentro deste try e nunca dê um valor a tea: a parada é NameError. except ZeroDivisionError não trata esse nome. O programa para mesmo assim. skip não é escrito, nem done. Essa linha não está no programa desta página.
Se todas as linhas dentro de try chegam ao fim, except não corre. O programa seguinte começa de novo. Nada da primeira tela continua aqui.
try:
print(8 / 2)
except ZeroDivisionError:
print("skip")
print("done")
Na tela aparece 4.0, depois done. 4.0 é quatro, com um ponto decimal. Não houve parada, então skip não é escrito. done corre mesmo assim, porque está fora da captura.
As linhas debaixo de try e debaixo de except ficam mais à direita. Esse recuo é o que as põe para dentro. print("done") não está recuado debaixo de except, então não faz parte da captura. Corre quando try termina, e também quando a parada nomeada é apanhada.
A página seguinte é você mesmo provocar uma parada. Esta página só apanha uma parada que uma linha já encontrou, e só quando o nome bate.
O que se escreve e o que se salta
- O que o primeiro programa escreve?
- O que acontece com print("rice")?
- O que o segundo programa escreve?
- O que acontece se print(tea) está dentro de try, tea nunca recebeu um valor, e except só nomeia ZeroDivisionError?
O nome tem de bater
A primeira tela é skip, depois done. rice não corre, porque continua dentro de try depois da parada. A segunda é 4.0, depois done, e skip não é escrito. NameError não é apanhado por except ZeroDivisionError. done está fora, então corre quando a parada nomeada é apanhada e quando try termina. A página seguinte é você mesmo provocar uma parada.
🧠 Teste Seu Conhecimento
Teste Seu Conhecimento
Desafie-se com este questionário interativo e veja o quão bem você entende o tópico
📝 Instruções
- Leia cada pergunta cuidadosamente
- Selecione a melhor resposta para cada pergunta
- Você pode refazer o quiz quantas vezes quiser
- Seu progresso será mostrado no topo