Entendendo erros simples

Veja como interpretar mensagens de erro sem medo, como pistas que ajudam a encontrar o problema.

Quando estamos aprendendo Python, é normal encontrar mensagens de erro.

No começo, elas podem assustar um pouco. Muitas aparecem em inglês, têm várias linhas e parecem mais complicadas do que realmente são.

Mas aqui vai uma ideia importante:

Um erro não é uma bronca, é uma pista.

Pense em uma mensagem de erro como um aviso no painel de um carro. Ela não está dizendo que você é ruim em dirigir. Ela está dizendo que existe algo para verificar.

Nesta lição, vamos aprender:

  • por que erros acontecem;
  • como ler uma mensagem de erro com calma;
  • o que significam alguns erros comuns;
  • como usar a linha indicada pelo Python;
  • como corrigir problemas simples sem apagar tudo.

Errar faz parte da programação

Programar é escrever instruções para o computador.

O computador segue essas instruções de forma muito literal. Ele não entende intenção, chute ou "você sabe o que eu quis dizer".

Se você escreve:

pront("Olá!")

O computador não pensa:

"Acho que a pessoa queria escrever print."

Ele apenas responde que não conhece pront.

Isso pode parecer rígido, mas também é uma vantagem. Quando aprendemos a ler os erros, conseguimos descobrir exatamente onde o problema está.

O que é uma mensagem de erro?

Uma mensagem de erro é uma resposta do Python quando algo impede o programa de funcionar corretamente.

Veja um exemplo:

print("Olá, mundo!"

Esse código está com um problema: falta fechar o parêntese.

Ao executar, o Python pode mostrar uma mensagem parecida com:

  File "programa.py", line 1
    print("Olá, mundo!"
         ^
SyntaxError: '(' was never closed

Mesmo parecendo grande, essa mensagem traz pistas importantes.

Vamos separar em partes.

Lendo uma mensagem de erro por partes

Uma mensagem de erro geralmente responde algumas perguntas:

  1. Em qual arquivo o problema aconteceu?
  2. Em qual linha o problema apareceu?
  3. Qual trecho do código parece ter problema?
  4. Qual é o tipo do erro?
  5. O que o Python está tentando avisar?

No exemplo:

File "programa.py", line 1

Essa parte indica:

  • o arquivo: programa.py;
  • a linha: 1.

Depois aparece o trecho:

print("Olá, mundo!"

Isso mostra a linha que o Python estava tentando entender.

Em seguida, aparece:

SyntaxError: '(' was never closed

Essa é a pista principal.

O Python está dizendo que um parêntese foi aberto, mas não foi fechado.

Forma corrigida:

print("Olá, mundo!")

O que é SyntaxError?

SyntaxError significa erro de sintaxe.

Sintaxe é o jeito correto de escrever uma linguagem.

Pense na língua portuguesa. Se alguém escreve:

Eu gosto de estudar.

A frase está organizada.

Mas se alguém escreve:

Eu de estudar gosto.

Dá até para tentar entender, mas a estrutura ficou estranha.

Em Python, a sintaxe precisa seguir regras bem específicas.

Exemplo com erro:

print("Estou aprendendo Python!"

Problema:

  • abriu parêntese;
  • abriu aspas;
  • fechou aspas;
  • mas esqueceu de fechar o parêntese.

Forma correta:

print("Estou aprendendo Python!")

Outro exemplo:

print("Bom dia!)

Aqui falta fechar as aspas antes do parêntese.

Forma correta:

print("Bom dia!")

O que é NameError?

NameError acontece quando o Python encontra um nome que ele não conhece.

Veja:

pront("Olá!")

O Python conhece print, mas não conhece pront.

A mensagem pode ser parecida com:

NameError: name 'pront' is not defined

Isso quer dizer:

O nome pront não foi definido.

Forma correta:

print("Olá!")

Esse erro costuma acontecer quando:

  • digitamos o nome de um comando errado;
  • esquecemos alguma letra;
  • usamos letras maiúsculas ou minúsculas de forma diferente;
  • tentamos usar algo que ainda não foi criado no código.

Python diferencia letras maiúsculas e minúsculas.

Isso significa que:

print("Olá!")

é diferente de:

Print("Olá!")

O correto é print com letra minúscula.

O que é erro de arquivo não encontrado?

Às vezes, o problema não está dentro do código, mas na forma como tentamos executar o arquivo.

Imagine que você criou um arquivo chamado:

primeiro_programa.py

Mas, no terminal, você digitou:

python primeiro.py

O Python pode mostrar uma mensagem dizendo que não encontrou o arquivo.

Algo parecido com:

can't open file 'primeiro.py': No such file or directory

Essa mensagem quer dizer:

Não encontrei esse arquivo neste lugar.

Possíveis causas:

  • o nome do arquivo foi digitado errado;
  • o terminal está aberto na pasta errada;
  • o arquivo não foi salvo;
  • a extensão .py ficou faltando;
  • o arquivo tem outro nome.

Se isso acontecer, confira o nome do arquivo com calma.

Por exemplo:

primeiro_programa.py

é diferente de:

primeiro-programa.py
primeiro_programa.txt
primeiro programa.py

Para evitar confusão, prefira nomes simples:

primeiro_programa.py
exercicio_print.py
mensagem.py

O que é IndentationError?

IndentationError é um erro relacionado ao espaço no começo da linha.

Indentação é o recuo do código.

Ainda vamos estudar isso com mais calma quando chegarmos em estruturas como if, for e funções. Por enquanto, basta entender que em Python os espaços no começo da linha podem ter significado.

Veja este exemplo:

print("Primeira linha")
 print("Segunda linha")

Na segunda linha existe um espaço antes do print.

Dependendo do contexto, o Python pode interpretar esse espaço de forma inesperada e mostrar um erro de indentação.

Forma mais organizada:

print("Primeira linha")
print("Segunda linha")

Pense na indentação como organizar objetos em uma prateleira. Se um item fica deslocado sem motivo, parece que ele pertence a outro grupo.

No começo, uma boa regra é:

Se você ainda não aprendeu blocos de código, deixe seus print alinhados no começo da linha.

O que é TypeError?

TypeError acontece quando tentamos fazer uma operação com tipos de dados que não combinam.

Ainda vamos estudar tipos de dados com mais detalhes, mas já dá para ver um exemplo simples.

Observe:

print("Idade: " + 15)

Aqui temos:

  • "Idade: " como texto;
  • 15 como número.

O Python pode não aceitar juntar texto e número dessa forma.

Uma forma simples de resolver é colocar tudo como texto:

print("Idade: " + "15")

Outra forma é separar os valores por vírgula:

print("Idade:", 15)

Por enquanto, guarde esta ideia:

Alguns valores são textos, outros são números. Nem sempre podemos misturar os dois de qualquer jeito.

Nem todo problema mostra erro

Às vezes, o programa executa, mas o resultado não é o que esperávamos.

Veja:

print("10 + 5")

Resultado:

10 + 5

O Python não fez a conta porque tudo está entre aspas. Para ele, isso é um texto.

Se a intenção era calcular, o correto seria:

print(10 + 5)

Resultado:

15

Esse tipo de problema é comum: não aparece uma mensagem de erro, mas o resultado não sai como planejado.

Nesses casos, precisamos comparar:

  • o que eu queria que acontecesse?
  • o que realmente aconteceu?
  • qual parte do código controla esse resultado?

Um jeito calmo de corrigir erros

Quando aparecer um erro, siga um pequeno roteiro.

1. Leia a última linha da mensagem

Muitas vezes, a pista mais importante está no final.

Exemplo:

SyntaxError: '(' was never closed

Essa última linha mostra o tipo do erro e uma explicação curta.

2. Procure o número da linha

Veja se a mensagem indica algo como:

line 3

Isso ajuda a encontrar o ponto onde o Python percebeu o problema.

Às vezes, o erro real está uma linha antes. Por exemplo, se esquecemos de fechar aspas ou parênteses, o Python pode perceber isso apenas na linha seguinte.

3. Compare abertura e fechamento

Confira se tudo que abriu também fechou:

  • aspas "texto";
  • parênteses ( );

É como conferir portas e janelas antes de sair de casa: abriu, precisa fechar.

4. Verifique nomes escritos

Confira se comandos foram escritos corretamente:

print("Olá!")

Não:

pront("Olá!")

Também veja se está usando letras minúsculas e maiúsculas corretamente.

5. Teste aos poucos

Evite escrever muitas linhas sem executar.

Uma boa prática é:

  1. escreva uma parte pequena;
  2. salve o arquivo;
  3. execute;
  4. veja se funcionou;
  5. continue.

Assim, se aparecer erro, fica mais fácil descobrir onde ele nasceu.

Exemplo completo de investigação

Imagine este código:

print("Iniciando programa")
Print("Aprendendo Python")
print("Fim")

Ao executar, aparece um erro parecido com:

NameError: name 'Print' is not defined

Vamos investigar:

  1. A última linha fala NameError.
  2. O nome citado é Print.
  3. Python diferencia maiúsculas e minúsculas.
  4. O comando correto é print, com p minúsculo.

Código corrigido:

print("Iniciando programa")
print("Aprendendo Python")
print("Fim")

Perceba que não foi preciso apagar tudo. Bastou encontrar a pista e corrigir o detalhe.

Pequeno exercício guiado

Observe o código com problemas:

print("Olá, estudante!"
pront("Bem-vindo ao Python")
print("Vamos praticar juntos.")

Ele tem dois problemas principais:

  • falta fechar um parêntese na primeira linha;
  • pront foi escrito no lugar de print.

Versão corrigida:

print("Olá, estudante!")
print("Bem-vindo ao Python")
print("Vamos praticar juntos.")

Agora pratique:

  1. Crie um arquivo chamado corrigindo_erros.py.
  2. Copie o código com problemas.
  3. Execute e observe a mensagem de erro.
  4. Corrija um problema por vez.
  5. Execute novamente até funcionar.

Esse exercício ajuda você a treinar uma habilidade muito importante: corrigir sem medo.

O que aprendemos nesta lição

Nesta lição, você aprendeu que:

  • erros são pistas, não sinais de fracasso;
  • mensagens de erro ajudam a encontrar o problema;
  • a linha indicada pelo Python mostra onde ele percebeu algo estranho;
  • SyntaxError geralmente indica problema na forma de escrever o código;
  • NameError indica um nome que o Python não reconheceu;
  • erro de arquivo não encontrado pode acontecer ao digitar o nome errado ou estar na pasta errada;
  • IndentationError tem relação com espaços no começo da linha;
  • TypeError pode acontecer ao misturar tipos de dados de forma inadequada;
  • testar o código aos poucos facilita a correção.

Aprender a lidar com erros é uma das partes mais importantes da programação. Quanto melhor você lê as pistas, mais independente fica para resolver problemas.