Módulo 13 - Quando dá errado: erros e robustez

Exceções: tentar e capturar

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026

O que você vai aprender

  • Entender o que é uma exceção (um erro de execução sinalizado).
  • Usar o tentar/capturar para interceptar e tratar erros.
  • Substituir a quebra bruta por uma mensagem amigável.
  • Saber quando faz sentido capturar uma exceção.

A rede de segurança do programa

Alguns trechos de código são naturalmente arriscados: converter um texto que o usuário digitou em número (e se ele digitou letras?), abrir um arquivo (e se não existir?), acessar a internet (e se a conexão cair?). Nessas horas, o programa pode topar com uma exceção, o nome técnico de um erro de execução sinalizado. Sem tratamento, a exceção sobe e derruba o programa, fechando o app ou mostrando uma tela de erro feia. Mas você não precisa aceitar isso. As linguagens oferecem uma rede de segurança chamada tentar e capturar: você embrulha o trecho arriscado num bloco tentar e, logo depois, escreve um bloco capturar dizendo o que fazer se der erro. Se a exceção acontecer dentro do tentar, o programa não quebra; ele pula direto para o capturar, onde você assume o controle.

tentar
  idade <- converterParaNumero(textoDigitado)
  escreva("Você tem ", idade, " anos")
capturar erro
  escreva("Por favor, digite a idade usando apenas números")
fim
// se o usuário digitou "abc", o converter falha, mas o programa
// não quebra: pula para o capturar e mostra a mensagem amigável

O trecho arriscado fica no tentar. Se der erro, o programa desvia para o capturar em vez de quebrar.

Um fluxo em que o código entra numa caixa tentar e caminha por uma ponte. No meio da ponte há um buraco (o erro); em vez de cair, uma rede de segurança embaixo, rotulada capturar, ampara o programa e o leva a uma saída tratada com mensagem amigável. Uma segunda via mostra que, sem a rede, o programa despencaria (quebra).
O tentar é a ponte arriscada; o capturar é a rede que ampara o erro e evita a queda (a quebra do programa).

Tratar o erro com elegância

O que você faz dentro do capturar define a qualidade do seu programa. A opção mais básica é avisar o usuário com uma mensagem clara e amigável: em vez de um críptico erro de conversão, um educado por favor, digite apenas números. Mas dá para ir além. Você pode oferecer uma alternativa (usar um valor padrão quando o arquivo de configuração não abre), tentar de novo (reconectar quando a internet cai), ou registrar o problema para investigar depois, mantendo o programa vivo. O ponto central é que o capturar devolve a você o controle numa situação que, sem ele, terminaria em quebra. Um programa robusto não é um que nunca encontra erros; é um que sabe o que fazer quando os encontra. E a diferença que o usuário sente é enorme: um app que trata erros passa confiança, enquanto um que fecha do nada parece amador.

🎮 Jogo da aula

Onde falta a rede

Este código lê a idade digitada e pode quebrar se o usuário digitar letras. Toque na linha que deveria estar protegida por um tentar/capturar.

Quando capturar e quando deixar quebrar

Uma tentação de iniciante é embrulhar tudo em tentar/capturar para o programa nunca quebrar. Isso é um erro sutil. Capturar uma exceção e não fazer nada com ela, ou esconder o erro sob o tapete, transforma uma quebra visível num erro de lógica silencioso, que é pior. A boa prática é capturar apenas os erros que você sabe como tratar de forma útil: o usuário digitou algo inválido, o arquivo opcional não existe, a rede oscilou. Para esses, você tem uma resposta sensata. Já erros que revelam um bug de programação, uma variável que nunca deveria estar vazia, uma condição impossível, muitas vezes é melhor deixar aparecer durante o desenvolvimento, para você consertar a causa, em vez de mascarar. Capturar é uma ferramenta de tratar o esperado-mas-ruim, não de varrer bugs para debaixo do tapete. Usada assim, ela deixa o programa robusto; usada para silenciar tudo, ela esconde problemas.

Teste rápido

Qual é o principal benefício de usar tentar/capturar ao redor de um trecho arriscado?

Perguntas frequentes

O que é uma exceção?
É um erro de execução sinalizado pelo programa quando ele topa com uma situação que não consegue tratar, como dividir por zero ou abrir um arquivo ausente. A exceção interrompe o fluxo normal. Se ninguém a captura, o programa quebra; se capturada, você trata o problema e segue.
Como funciona o tentar/capturar?
Você marca o trecho arriscado com um bloco tentar e escreve, logo depois, um bloco capturar com o que fazer se der erro ali. Se uma exceção acontece dentro do tentar, o programa pula para o capturar em vez de quebrar. É uma rede de segurança que ampara a falha e devolve o controle a você.
O que devo fazer dentro do capturar?
Tratar o erro de forma útil: mostrar uma mensagem amigável, usar um valor padrão, tentar de novo, ou registrar o problema para investigar. O objetivo é manter o programa em pé e o usuário informado. O que não vale é capturar e não fazer nada, o que esconde o erro e cria um problema silencioso.
Devo embrulhar todo o código em tentar/capturar?
Não. Capture apenas os erros que você sabe tratar de forma sensata (entrada inválida, arquivo opcional ausente, rede oscilando). Erros que revelam bugs de programação muitas vezes é melhor deixar aparecer no desenvolvimento, para consertar a causa. Capturar tudo mascara bugs e transforma quebras visíveis em erros silenciosos.
Capturar uma exceção conserta o erro?
Não conserta a causa; apenas evita que o erro derrube o programa e dá a você a chance de reagir. Se o usuário digitou letras onde esperava número, o capturar não corrige o que ele digitou, mas permite pedir de novo educadamente. Consertar a causa (validar antes, arrumar o bug) é um passo separado.
Exceção é a mesma coisa que erro de execução?
São intimamente ligados: a exceção é a forma como um erro de execução é sinalizado e propagado pelo programa. Quando ocorre uma divisão por zero, o programa levanta uma exceção. Se você não a captura, ela vira aquela quebra com mensagem de erro. O tentar/capturar é o mecanismo para interceptá-la.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.