Skip to content
Latchkey

O Que É uma Exceção? Sinalizando Que Algo Deu Errado

Uma exceção é um sinal de que algo deu errado durante a execução: ela interrompe o fluxo normal e se propaga para cima até que algum código a capture e trate.

Quando o código encontra uma situação pela qual não consegue prosseguir, um arquivo ausente, uma entrada ruim, uma chamada de rede que falhou, ele pode lançar (throw) uma exceção. Isso desenrola a pilha de chamadas, pulando a execução normal, até que um handler a capture. Exceções separam o caminho feliz do tratamento de erros, mas uma exceção não capturada encerra o programa.

Como as exceções fluem

Lançar uma exceção interrompe a execução normal e sobe pela pilha de chamadas procurando um handler correspondente (um try/catch ou equivalente). Se um for encontrado, o controle salta para lá; se nenhum for, a exceção alcança o topo e trava o programa com um erro e um stack trace.

Quando usar exceções

  • Condições verdadeiramente excepcionais fora do fluxo normal.
  • Erros que um chamador distante, não o imediato, deve tratar.
  • Situações em que retornar um valor de erro poluiria o código.
  • Falhas que não devem ser silenciosamente ignoradas.

Exceções vs valores de erro

Algumas linguagens favorecem exceções; outras (como Go e Rust) retornam erros como valores para que o tratamento seja explícito. Exceções mantêm o caminho feliz limpo, mas podem esconder onde as falhas ocorrem; valores de erro são explícitos mas mais verbosos. Ambos são estilos válidos.

O stack trace

Uma exceção não capturada imprime um stack trace: a cadeia de chamadas que levou ao erro. É o artefato mais útil para depuração, mostrando exatamente onde e como a falha aconteceu. Ler stack traces bem é uma habilidade central.

Um exemplo rápido

Chamar JSON.parse("not json") lança uma exceção. Envolvê-la em try/catch permite tratar a entrada ruim graciosamente em vez de travar o programa inteiro.

Exceções em CI

Uma exceção não capturada em um teste falha a execução e imprime um stack trace, sua primeira pista da causa. A maioria dessas falhas são bugs determinísticos a corrigir, mas algumas vêm de infraestrutura transitória (uma conexão perdida). A Latchkey repete automaticamente casos transitórios enquanto deixa exceções reais visíveis.

Principais conclusões

  • Uma exceção sinaliza um erro, desenrolando a pilha até que um handler a capture.
  • Exceções não capturadas travam o programa e imprimem um stack trace para depuração.
  • Exceções e valores de erro são dois estilos válidos para lidar com falhas.

Guias relacionados