Carregando...

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.

a parada é apanhada, rice não corre, done corre

python
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.

não há parada, então skip não é escrito

python
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

  1. O que o primeiro programa escreve?
  2. O que acontece com print("rice")?
  3. O que o segundo programa escreve?
  4. 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

Pronto para Começar

Teste Seu Conhecimento

Desafie-se com este questionário interativo e veja o quão bem você entende o tópico

❓
5
Perguntas
🎯
70%
Para Passar
♾️
∞
Tempo
🔄
∞
Tentativas

📝 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