Depuração (Debugging) em Python

1. Tipos de Erros

1.1 Erros de Sintaxe (Syntax Errors)

São detectados pelo interpretador enquanto ele converte o código‑fonte em bytecode. Geralmente indicam que algo está escrito fora das regras da linguagem (esquecimento de :, parênteses não fechados, uso de palavra‑chave como nome de variável etc.).

Exemplo:

def soma(a, b)
    return a + b

O interpretador gera SyntaxError: invalid syntax porque falta o dois‑pontos após a definição da função.

Ilustração de erro de sintaxe

1.2 Erros de Execução (Runtime Errors)

Ocorrem depois que o código já foi compilado e está sendo executado. São causados por situações que só podem ser verificadas em tempo de execução, como divisão por zero, acesso a índices inexistentes ou chamadas recursivas sem caso base.

Exemplo:

lista = [1, 2, 3]
print(lista[5])

Resultado: IndexError: list index out of range.

Ilustração de erro de execução

1.3 Erros Semânticos (Semantic Errors)

O programa roda sem gerar exceções, mas o resultado não é o esperado. São, na prática, “erros de lógica”.

Exemplo: Calcular a área de um círculo usando π * r² mas escrever π * r no código.

Ilustração de erro semântico

2. Estratégias de Depuração

2.1 Erros de Sintaxe

  • Verifique : em def, if, for, while, elif, else.
  • Cheque a consistência de indentação (espaços vs. tabs).
  • Confirme pares de aspas, parênteses, colchetes e chaves.
  • Evite usar palavras‑reservadas como nomes de variáveis.
  • Use == em comparações, não =.

2.2 Erros de Execução

  • Programa não faz nada: certifique‑se de que há uma chamada de função ou um bloco if __name__ == "__main__":.
  • Laço infinito: adicione print antes e depois do laço ou use breakpoints.
  • Recursão infinita: garanta a existência de caso base e imprima os parâmetros a cada chamada.
  • Exceções comuns: NameError, TypeError, KeyError, AttributeError, IndexError. Use print ou logging para inspecionar valores antes da linha que falha.

2.3 Erros Semânticos

  • Divida o programa em funções pequenas e teste cada uma isoladamente.
  • Use variáveis temporárias para tornar expressões complexas mais legíveis.
  • Adicione parênteses para deixar explícita a ordem de avaliação.
  • Utilize assert ou testes unitários (unittest, pytest) para validar comportamentos esperados.

3. Dicas Gerais

  • Trabalhe com a menor entrada que reproduz o erro.
  • Comente trechos de código para isolar a região problemática.
  • Se o programa parece “travar”, dê um tempo ao cérebro: faça uma pausa, caminhe, volte com a mente fresca.
  • Ao pedir ajuda, descreva a mensagem de erro, o trecho de código relevante e o que já foi tentado.

Resumo dos Tópicos

  • 1. Tipos de Erros
    • 1.1 Erros de Sintaxe – detectados na fase de compilação; exemplos: falta de :, parênteses não fechados.
    • 1.2 Erros de Execução – surgem durante a execução; exemplos: IndexError, ZeroDivisionError, recursão infinita.
    • 1.3 Erros Semânticos – programa roda, mas o resultado está errado; são erros de lógica.
  • 2. Estratégias de Depuração
    • 2.1 Erros de Sintaxe – verifique dois‑pontos, indentação, aspas, parênteses, palavras‑reservadas e uso de ==.
    • 2.2 Erros de Execução
      • Programa “não faz nada” – garantir ponto de entrada.
      • Laço infinito – imprimir antes/depois do laço ou usar breakpoint.
      • Recursão infinita – caso base e impressão de parâmetros.
      • Exceções comuns – NameError, TypeError, KeyError, AttributeError, IndexError.
    • 2.3 Erros Semânticos – dividir em funções, usar variáveis temporárias, colocar parênteses, escrever testes unitários.
  • 3. Dicas Gerais
    • Trabalhar com a menor entrada que reproduz o erro.
    • Comentar partes do código para isolar o problema.
    • Fazer pausas para clarear o pensamento.
    • Ao pedir ajuda, fornecer mensagem de erro, trecho de código e tentativas já realizadas.

Mapa Mental

mindmap root((Depuração em Python)) Erros Sintaxe Falta de : Indentação Parênteses não fechados Execução Laço infinito Recursão infinita Exceções NameError TypeError KeyError AttributeError IndexError Semânticos Lógica incorreta Ordem de avaliação Estratégias Print/Logging Breakpoints Testes unitários Variáveis temporárias Dicas Entrada mínima Comentários Pausa mental Pedir ajuda corretamente

Questões sobre o assunto

1. Qual das alternativas abaixo descreve corretamente um erro de sintaxe?
1.50 pontos Média

Resposta correta: C) Aparece quando o interpretador encontra código que viola as regras da linguagem, como falta de dois‑pontos ou parênteses não fechados.

Erros de sintaxe são detectados antes da execução, durante a fase de compilação do código‑fonte.

2. Considere o seguinte trecho de código:
def f(n):
    if n == 0:
        return 1
    else:
        return n * f(n-1)

print(f(5))

Qual das afirmações abaixo está INCORRETA?

2.50 pontos Difícil

Resposta correta: D) O programa gera um RuntimeError...

Para n = 5 a recursão termina corretamente, retornando 120. O erro só ocorreria se n fosse negativo, pois não há caso base para n < 0.

3. Qual das alternativas abaixo é a melhor prática para identificar a causa de um IndexError em um laço while que itera sobre uma lista?
2.50 pontos Difícil

Resposta correta: C) Dentro do laço, imprimir o índice atual e o tamanho da lista a cada iteração.

Isso permite observar exatamente quando o índice ultrapassa o tamanho da lista, facilitando a localização do ponto de falha.

4. Analise o seguinte código que pretende calcular a expressão a / (b * c):
a = 12
b = 3
c = 4
y = a / b * c
print(y)

Qual das afirmações abaixo descreve **exatamente** o que acontece e como corrigir o problema?

3.50 pontos Extrema

Resposta correta: C) O código produz 9, pois a divisão e multiplicação têm a mesma precedência e são avaliadas da esquerda para a direita. A correção é usar parênteses: y = a / (b * c).

Com a = 12, b = 3 e c = 4, (a / b) * c = (12/3)*4 = 4*4 = 16 – na verdade o valor impresso é 16. O enunciado pede a correção para obter 12/(3*4)=1. Portanto a alternativa C descreve corretamente a causa e a solução.

Pontuação Total
0.00