Menu
Coddy logo textTech

O que é um erro de lógica?

Um erro de lógica é uma falha no raciocínio de um programa que faz ele produzir o resultado errado sem travar nem mostrar nenhuma mensagem de erro. O código é válido e todas as linhas executam, mas ele não faz o que o programador pretendia.

Por Kevin Spektor, Cofundador e CTO

Atualizado em 24 de setembro de 2026

Três notas de prova, 80, 90 e 100, têm média 90. Este programa executa sem uma única reclamação e imprime outra coisa:

Average: 203.33333333333334

O Python fez exatamente o que a linha diz. A divisão acontece antes da soma, então só a última nota foi dividida por 3, e o resultado é 80 + 90 + 33,33. O programador queria (scores[0] + scores[1] + scores[2]) / 3. Coloque os parênteses e o programa imprime Average: 90.0.

Por que nenhuma mensagem de erro aparece

Um computador verifica se o código é válido, não se ele está correto. O parser verifica a gramática, o que detecta um erro de sintaxe. O runtime verifica cada operação, o que detecta um erro de tempo de execução como dividir por zero. Somar três números e dividir um deles por 3 é gramática válida e uma operação permitida, então as duas verificações passam.

Só quem escreveu o programa sabe que ele deveria calcular uma média. Essa intenção não existe em lugar nenhum do código, então nenhuma ferramenta consegue comparar o resultado com ela. Um erro de lógica é a distância entre o que você mandou o computador fazer e o que você queria que ele fizesse.

Causas comuns de erros de lógica

A maioria dos erros de lógica vem de uma lista curta de padrões.

  • Erros de um a mais ou a menos (off-by-one). Um loop executa uma vez a mais ou a menos. range(1, 5) produz 1, 2, 3 e 4, porque o fim é excluído. Veja iteração.
  • Precedência de operadores. a + b / 2 divide só b, como na média acima.
  • A comparação errada. < onde era preciso <=, ou and onde era preciso or. Condições são expressões booleanas, e um único operador errado inverte o resultado para algumas entradas.
  • Condições na ordem errada. Em uma cadeia de if e elif, a primeira condição verdadeira vence, então um teste amplo colocado primeiro esconde os mais específicos abaixo dele.
  • A variável errada. Atualizar total dentro de um loop, mas imprimir subtotal.
  • Suposições sobre números. 0.1 + 0.2 == 0.3 é False em Python, Java e JavaScript, porque números de ponto flutuante são aproximações. 7 // 2 é 3, não 3,5.

Aqui está o erro de ordem das condições. Uma nota 95 deveria ser um A:

D
D
F

95 é maior ou igual a 60, então o primeiro ramo vence e o elif nunca é alcançado. Coloque o limite mais alto primeiro e todos os resultados ficam certos.

Tipos de erros em programação

Os erros de programação costumam ser classificados em três tipos, conforme quando aparecem e o que os informa.

Erro de sintaxeErro de tempo de execuçãoErro de lógica
Quando apareceAntes de o programa executarEnquanto executaEnquanto executa, ou nunca é percebido
O que detectaO parser ou o compiladorO runtime ou o sistema operacionalUma pessoa ou um teste
O programa executa?NãoAté a linha que falhaSim, até o fim
Mensagem de erroSim, com número de linhaSim, com tracebackNenhuma
Exemplo em Pythonif x > 3 sem os dois-pontos10 / 0a + b / 2 para uma média
Como encontrarLer a mensagemLer o tracebackComparar a saída com uma resposta conhecida

Alguns livros listam mais tipos, e a maioria deles cabe dentro destes três. Um erro de tipo que o compilador Java rejeita, como incompatible types: String cannot be converted to int, é encontrado em tempo de compilação como um erro de sintaxe, e alguns livros o chamam de erro semântico. Um erro de linker acontece na última etapa da construção de um programa em C ou C++, quando uma função foi declarada mas o código dela não está em lugar nenhum. Erros aritméticos, de recursos e de arquivo, como dividir por zero, ficar sem memória ou abrir um arquivo inexistente, são todos erros de tempo de execução. O termo "erro semântico" também é usado por alguns cursos como outro nome para erro de lógica, então confira qual significado o livro usa.

Como encontrar um erro de lógica

  1. Teste com uma resposta que você já conhece. Calcule à mão o resultado correto para uma entrada pequena e depois compare. Três notas são mais fáceis de conferir do que três mil.
  2. Imprima os valores intermediários. Imprimir score e o ramo escolhido, ou o contador do loop a cada passagem, mostra o passo exato em que a realidade se afasta do seu plano.
  3. Avance passo a passo com um depurador. Colocar um breakpoint e executar uma linha de cada vez faz o mesmo sem editar o código.
  4. Teste os limites. Experimente 0, 1, o maior valor, uma lista vazia e o limite exato (60 e 90 no exemplo das notas).
  5. Explique o código em voz alta. Descrever cada linha para outra pessoa, ou para um patinho de borracha, obriga você a dizer o que a linha faz, e não o que você supõe que ela faz.

Um assert transforma uma resposta conhecida em uma verificação automática. Ele não faz nada quando a condição é verdadeira e para o programa quando ela é falsa:

Traceback (most recent call last):
  File "main.py", line 10, in <module>
    assert grade(95) == "A", "95 should be an A"
           ^^^^^^^^^^^^^^^^
AssertionError: 95 should be an A

Um teste que falha transforma um erro de lógica silencioso em um erro barulhento, com número de linha. Essa é toda a ideia por trás dos testes unitários.

Erros de lógica em outras linguagens

Os padrões são os mesmos em todo lugar, mas cada linguagem tem as próprias armadilhas. Em JavaScript, "5" + 3 é a string "53", enquanto "5" - 3 é o número 2, então um valor lido de um formulário como texto pode somar errado sem nenhum erro. Em C, if (x = 5) atribui 5 a x e é sempre verdadeiro. O Clang avisa sobre isso por padrão (using the result of an assignment as a condition without parentheses), mas o código ainda compila e executa, então leve os avisos do compilador tão a sério quanto os erros.

Próximos passos

Compare esta página com as páginas de erro de sintaxe e erro de tempo de execução para ver como cada tipo é informado. Os loops são onde moram os erros de um a mais ou a menos, então a página de iteração e o guia de Python sobre loops for são boas leituras a seguir. Para praticar encontrar resultados errados em exercícios reais, experimente o curso de Python.

Perguntas frequentes

Qual é a diferença entre erro de sintaxe e erro de lógica?
Um erro de sintaxe quebra a gramática da linguagem, então o programa é rejeitado antes de executar e você recebe uma mensagem com o número da linha. Um erro de lógica segue a gramática perfeitamente e executa até o fim, mas o resultado está errado, e não há mensagem nenhuma. Você encontra um erro de sintaxe lendo a mensagem; encontra um erro de lógica testando a saída.
O que é um erro de lógica em Python?
É um código Python que executa sem traceback, mas dá a resposta errada. Exemplos típicos são range(1, 5) quando você queria de 1 a 5 inclusive, a + b / 2 quando você queria (a + b) / 2, e ramos if verificados na ordem errada. O Python não consegue detectá-los, porque não tem como saber o que você quis dizer.
Quais são os 5 tipos de erros em programação?
Uma lista comum de cinco é: erros de sintaxe, erros semânticos (de tipo), erros de linker, erros de tempo de execução e erros de lógica. Os três primeiros são encontrados enquanto o programa é construído, os erros de tempo de execução aparecem enquanto ele executa, e os erros de lógica só aparecem como resultados errados. Muitos cursos ensinam só três: sintaxe, execução e lógica.
Um erro de lógica é um bug?
Sim. Um bug é qualquer defeito que faz um programa se comportar de um jeito diferente do pretendido, e os erros de lógica são o tipo mais comum. Travamentos e mensagens de erro também são bugs, mas eles se anunciam, enquanto um erro de lógica precisa ser percebido por uma pessoa ou por um teste.
Por que erros de lógica são difíceis de encontrar?
Porque nada aponta para eles. Não há número de linha nem mensagem, e o resultado errado pode parecer plausível, como uma média de 203 para três notas de prova que ninguém confere. Eles são encontrados comparando a saída com uma resposta que você já conhece, e é por isso que testes com resultados conhecidos importam.
Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR