Pular para conteúdo

Erros comuns do Python

A tabela cresce a cada capítulo. Quando algo der errado, procure aqui antes de procurar em qualquer outro lugar — a causa quase sempre está nesta lista.

Como ler uma mensagem de erro

De baixo para cima. A última linha diz o tipo do erro e o que aconteceu. Logo acima, a linha do seu programa em que ele apareceu — o número bate com o da margem do editor.

O Python moderno costuma sugerir a correção: Did you mean: ...? é o palpite dele, e o palpite quase sempre acerta.

A sua mensagem pode vir um pouco diferente

As mensagens deste material foram geradas rodando os programas de verdade, numa versão recente do Python. Versões diferentes escrevem o mesmo erro com palavras um pouco diferentes — a sugestão Did you mean: ...?, por exemplo, não aparece nas versões mais antigas.

O tipo do erro (NameError, TypeError, ValueError…) é o que não muda, e é ele que identifica o problema. Se o texto da sua mensagem não bater exatamente com o daqui, procure pelo tipo.

Capítulo 1 · Algoritmo e print

Mensagem ou sintoma Causa provável
SyntaxError: unterminated string literal uma aspa abriu e não fechou
SyntaxError: invalid syntax faltou um parêntese, ou sobrou
NameError: name '...' is not defined nome digitado diferente do que existe — leia a sugestão
o texto saiu com aspas na tela as aspas de fora ficaram dentro de outras aspas
a conta apareceu em vez do resultado a conta está entre aspas, então virou texto
o programa roda mas faz outra coisa as instruções estão na ordem errada

Capítulo 5 · if e else

Mensagem ou sintoma Causa provável
SyntaxError: ... Maybe you meant '==' or ':=' instead of '='? usou = (guardar) onde devia ser == (comparar)
SyntaxError: expected ':' faltaram os dois-pontos no fim da linha do if ou do else
IndentationError: expected an indented block after 'if' statement o if abriu e a linha de dentro não foi recuada
IndentationError: unexpected indent uma linha ficou recuada sem if nenhum acima dela
TabError: inconsistent use of tabs and spaces parte da indentação é Tab e parte é espaço; refaça só com espaços
SyntaxError na linha do else else com condição, else sem if acima, ou fora da margem do if
TypeError: '>' not supported between instances of 'str' and 'int' faltou int() ou float() em volta do input()
NameError numa variável criada dentro do if o bloco não rodou, então ela nunca chegou a existir
a linha de fora do if saiu junto com as de dentro ela está indentada sem querer
o valor da fronteira cai no lado errado > onde devia ser >= (ou o contrário)
duas contas com decimais deveriam ser iguais e == dá False comparação exata entre float; use >= / <= ou round
a função imprime a resposta certa e o teste falha dentro da função, print no lugar de return

Capítulo 6 · elif e operadores lógicos

Mensagem ou sintoma Causa provável
SyntaxError: invalid syntax na linha do elif escreveu else if ou elseif; em Python é elif
SyntaxError num elif que vem depois do else o else tem de ser o último da escada
o resultado é sempre o da última faixa são if independentes; troque por elif
um dos elif nunca acontece, para valor nenhum a ordem das faixas está invertida: um teste de cima já captura esses valores
um dos caminhos acontece sempre or com valor solto — falta repetir variavel == do outro lado
a condição com and e or misturados dá o contrário do esperado faltam parênteses separando as partes
o else de dentro respondeu pelo if de fora erro de margem num if aninhado

Os três erros da Unidade 2 não aparecem

Repare que metade das linhas das duas tabelas acima não tem mensagem nenhuma: é sintoma, não erro. if no lugar de elif, faixa fora de ordem e or com valor solto rodam limpo e entregam um resultado plausível.

A única defesa é a da Unidade 1: saber qual resposta esperar antes de rodar, e testar sempre os valores de fronteira de cada faixa.

Esta página acompanha o semestre

Cada capítulo acrescenta a sua seção aqui. Se o seu erro ainda não está listado, traga-o para a aula: ele provavelmente vale uma linha nova.

Capítulo 7 · while

Mensagem ou sintoma Causa provável
o programa não para e a tela enche laço infinito: falta o avanço da variável do teste
o programa não para e nada aparece laço infinito sem print — pare com Stop (ou Ctrl+C)
o total é igual à última parcela o acumulador foi zerado dentro do laço
o total deu zero a linha que soma ficou fora do bloco indentado
o laço deu uma volta a mais ou a menos < onde devia ser <=, ou vice-versa
IndentationError: expected an indented block after 'while' statement faltou indentar o corpo do laço
NameError logo na primeira volta a variável do teste não foi criada antes do while
a sentinela entrou na soma o valor é somado antes de a condição ser testada
a sentinela nunca encerra o laço falta o segundo input(), no fim do bloco

Capítulo 8 · for e range

Mensagem ou sintoma Causa provável
o laço deu uma volta a menos range(1, n) em vez de range(1, n + 1)
a contagem começou em 0 e você queria 1 range(n) em vez de range(1, n + 1)
o laço não fez nada e não deu erro range(0), ou um range cujo fim é menor que o início
TypeError: 'float' object cannot be interpreted as an integer passou um decimal ao range
TypeError: 'str' object cannot be interpreted as an integer faltou int() no valor lido do teclado
o total aparece várias vezes na tela o print está indentado, dentro do laço
o contador contou todas as voltas o + 1 ficou fora do if
IndentationError: expected an indented block after 'for' statement faltou indentar o corpo do laço