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.
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.
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.
: em def, if, for, while, elif, else.== em comparações, não =.if __name__ == "__main__":.print antes e depois do laço ou use breakpoints.NameError, TypeError, KeyError, AttributeError, IndexError. Use print ou logging para inspecionar valores antes da linha que falha.assert ou testes unitários (unittest, pytest) para validar comportamentos esperados.:, parênteses não fechados.IndexError, ZeroDivisionError, recursão infinita.==.NameError, TypeError, KeyError, AttributeError, IndexError.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.
def f(n):
if n == 0:
return 1
else:
return n * f(n-1)
print(f(5))
Qual das afirmações abaixo está INCORRETA?
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.
IndexError em um laço while que itera sobre uma lista?
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.
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?
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.