Exceções e tratamento de entradas
Objetivo da aula
Tratar falhas previsíveis sem esconder erros inesperados.
Regra desta aula: vamos assumir que você nunca viu este assunto antes. Nenhum termo importante será usado sem explicação e todo exemplo deve ser entendido linha por linha, não apenas copiado.
Começando do zero
Exceção é um evento que interrompe o fluxo normal porque uma operação não pôde ser concluída. try/except permite tratar falhas previstas, como o usuário digitar texto onde esperávamos número. O objetivo não é esconder erros; é responder de forma controlada aos problemas que realmente sabemos reconhecer.
Uma imagem mental para entender
Imagine uma catraca que tenta ler um cartão. Se o cartão estiver ilegível, a máquina não precisa explodir nem fingir que funcionou; pode mostrar “cartão inválido, tente novamente”. Tratamento de exceção é essa reação planejada para uma falha conhecida.
Conceitos essenciais, sem pular etapas
try
Contém a menor região prática onde uma exceção esperada pode ocorrer.
except ValueError
Trata especificamente conversões inválidas e outras operações que levantem esse tipo dentro do bloco.
Captura específica
Evite except: genérico neste nível. Capturar tudo pode esconder erros de programação que você deveria investigar.
Mensagem útil
Explique o que a pessoa pode corrigir: “digite um número inteiro” é melhor que “erro”.
Separar erro esperado de bug
Entrada humana inválida é esperável. Um NameError por variável escrita errado geralmente é bug e não deve ser silenciado como se fosse entrada ruim.
Modelo mental
OPERAÇÃO PREVISTA COMO ARRISCADA → SUCESSO: CONTINUA | EXCEÇÃO ESPECÍFICA: TRATA
Exemplo 1 — primeiro veja o programa inteiro
texto = input("Digite uma idade inteira: ")
try:
idade = int(texto)
print("Idade recebida:", idade)
except ValueError:
print("Entrada inválida. Digite apenas um número inteiro, como 25.")
Agora vamos ler linha por linha
- A operação arriscada é a conversão
int(texto). - Se funcionar, a execução continua dentro do
trye mostra a idade. - Se a conversão levantar
ValueError, o fluxo pula para o bloco correspondente. - O programa não inventa um valor; informa a falha e mantém a situação explícita.
Saída esperada
A saída depende do texto digitado.
Exemplo 2 — o mesmo conceito em outra situação
def ler_inteiro(texto):
try:
return int(texto)
except ValueError:
return None
valor = ler_inteiro("abc")
if valor is None:
print("Não foi possível converter")
Esta função transforma uma falha esperada em um resultado explícito None. Em programas maiores, outras estratégias podem ser melhores, mas aqui a ideia é separar conversão da interface.
Experimento guiado
Não pule esta parte. Programação só começa a fazer sentido quando você prevê um resultado, executa e compara a previsão com o que realmente aconteceu.
- Teste entradas “25”, “25.5” e “vinte”.
- Leia o tipo da exceção quando não houver
try/except, depois restaure o tratamento. - Mantenha dentro do
trysomente a operação que realmente pode gerar oValueErroresperado. - Nunca use
except: passpara “fazer o erro sumir” sem entender a consequência.
Mini desafio
Escreva um trecho que tente converter preço para float. Se falhar, mostre uma mensagem orientando o formato “12.50”.
Solução comentada
texto = input("Preço (ex.: 12.50): ")
try:
preco = float(texto)
print(f"Preço: {preco:.2f}")
except ValueError:
print("Preço inválido. Use números e ponto decimal, por exemplo 12.50.")
Depois de executar a solução, altere pelo menos um valor e explique por que o novo resultado mudou. Se você só copiou e não consegue explicar cada linha, refaça o desafio em uma versão menor.
Erros comuns e por que acontecem
- Capturar todas as exceções e esconder bugs.
- Colocar centenas de linhas dentro de um único
trye não saber qual operação falhou. - Usar valor padrão silencioso como 0 após entrada inválida e produzir cálculos enganadores.
- Mostrar apenas “erro” sem dizer ao usuário como corrigir a entrada.
Cheque se você realmente entendeu
Qual exceção é comum em int("abc")?
Resposta: ValueError.
Por que evitar except: genérico?
Resposta: Porque pode capturar e esconder falhas que não eram o problema previsto.
Tratamento de exceção substitui validação de faixa?
Resposta: Não. Converter com sucesso e estar dentro da regra são etapas diferentes.
Resumo em linguagem simples
Nesta aula, o ponto central foi Exceções e tratamento de entradas. Tente explicar o modelo OPERAÇÃO PREVISTA COMO ARRISCADA → SUCESSO: CONTINUA | EXCEÇÃO ESPECÍFICA: TRATA sem olhar a tela. Depois, escreva um exemplo próprio menor que os apresentados. Esse exercício de explicação é parte do aprendizado, não um extra.
Conexão com a próxima aula
Na próxima aula, Depuração orientada por evidências, vamos aproveitar exatamente o que foi construído aqui. Você não precisa memorizar tudo; precisa conseguir reconhecer o conceito e reconstruí-lo com raciocínio e testes.