Tamanho de fonte
Alto contraste
Altura de linha

Erros em Python: conheça os mais comuns e aprenda a corrigi-los

Avatar de Juliano Faccioni Juliano Faccioni
11 minutos de leitura 4 meses atrás

Se você programa em Python, certamente já se deparou com erros de programação. As mensagens compridas, em letras vermelhas e com diversos símbolos diferentes, certamente assustam todos que estão começando sua trajetória em programação Python.

Mas não se preocupe: neste artigo, iremos conhecer os principais erros em Python. Entenderemos quais as suas causas mais comuns e aprenderemos a contorná-los e evitá-los de forma simples e inteligente.

Se você ainda não começou a programar em Python, sugerimos que você faça o nosso curso gratuito, Python para Iniciantes: do zero ao primeiro projeto, onde você cria seu primeiro dashboard em menos de duas horas. Caso contrário, vamos em frente para conhecer os erros mais comuns de Python!

O que é um erro em Python?

Erros em Python (também conhecidos pelo nome exceção ou exception, em inglês) ocorrem quando algo inesperado impede o código de ser executado corretamente. Isso pode acontecer por vários motivos, como problemas na sintaxe do código ou operações inválidas.

Por exemplo, ao tentar executar o código print('Hello World!"), em que há uma mistura de aspas simples e duplas, Python gera um erro de sintaxe:

print('Hello World!")

# File "<stdin>", line 1
#   print('Hello World!")
#                        ^
# SyntaxError: unterminated string literal (detected at line 1)
Testar

Note que a mensagem de erro unterminated string (string não terminado), junto à posição indicada pelo caractere ^, ajuda a identificar e corrigir o problema.

O que fazer quando encontrar um erro em Python?

Ao encontrar um erro em Python, não se assuste! Erros são normais e fazem parte do aprendizado. Leia a mensagem de erro (traceback) com atenção, pois ela fornece informações valiosas sobre o que deu errado e onde.

Exemplo de traceback

print('olá'

# File "<stdin>", line 1
#     print("olá"
#          ^
# SyntaxError: '(' was never closed
Testar

No exemplo acima, a mensagem de erro SyntaxError: '(' was never closed indica que a sintaxe está incorreta, especificamente que um parêntese não foi fechado.

É fundamental ler todo o traceback, especialmente as últimas linhas, que geralmente contêm a mensagem de erro mais importante.

Dicas para lidar com erros

  1. Leia o traceback com atenção: a mensagem de erro pode parecer longa e complicada, mas as últimas linhas geralmente contêm a informação mais crucial.
  2. Busque a mensagem de erro na internet: muitas vezes, outros programadores já enfrentaram o mesmo problema e compartilharam soluções online. Então sites como StackOverflow podem ser de grande ajuda.
  3. Revise seu código: muitas vezes, erros comuns podem ser corrigidos apenas revisando e ajustando seu código conforme necessário.

Como lidar com erros em Python

Lidar com erros em Python envolve a utilização de blocos try/except. Esses blocos permitem que você capture e trate exceções de maneira controlada, evitando que o programa pare abruptamente.

A estrutura básica de um bloco try/except é a seguinte:

try:
    # Código que pode causar um erro
    x = float(input('Digite um número: '))
except ValueError:
    # Código que executa se ocorrer um erro
    print('Valor inválido! Usando valor padrão 10.')
    x = 10

print(f'O valor é {x}')

Para mais detalhes, confira nosso artigo sobre blocos try/except e gerenciamento de erros em Python.

Os erros mais comuns em Python

Erros em Python são inevitáveis, especialmente para quem está começando a programar. Portanto, vamos agora explorar os erros mais comuns em Python, entender suas causas e aprender a evitá-los.

IndentationError: erro de indentação em Python

O erro de indentação em Python, conhecido como IndentationError, ocorre quando a indentação (espaço em branco à esquerda) não está correta. Python utiliza a indentação para definir blocos de código, e qualquer inconsistência pode gerar esse erro.

Exemplo de IndentationError

Indentação inconsistente em múltiplas linhas:

x = 1
    y = 2  # IndentationError: unexpected indent
Testar

Indentação faltando em alguma linha que a requer (por exemplo, em um for loop):

for valor in [1, 2, 3]:
print(valor)  # IndentationError: expected an indented block after 'for' statement on line 1
Testar

Como evitar IndentationError em Python

Para evitar esse erro, certifique-se de que a indentação está consistente em todo o código. Utilize sempre o mesmo número de espaços ou tabulações para cada nível de indentação. A prática comum é usar 4 espaços para cada nível.

Ferramentas como IDEs de Python conseguem formatar seu código automaticamente conforme você o escreve, reduzindo muito este tipo de erro.

SyntaxError: erro de sintaxe em Python

O SyntaxError ocorre quando há problemas com a sintaxe (regras de escrita) do Python. Esse erro é bastante comum e pode ser causado por diversos motivos.

Exemplo de SyntaxError

Parênteses, aspas ou chaves não fechadas corretamente:

print('olá'  # SyntaxError: '(' was never closed
Testar

Falta de dois-pontos ou parênteses em blocos que necessitam:

for valor in (1, 2, 3)  # SyntaxError: expected ':'
    print(valor)

def minha_funcao  # SyntaxError: expected '('
    print('Esta é minha função!')
Testar

Uso de caracteres inválidos ou palavras-chave reservadas como variáveis:

meu!valor = 2  # SyntaxError: invalid syntax

for = 2  # SyntaxError: invalid syntax
Testar

Como evitar SyntaxError em Python

Para evitar esse erro, revise cuidadosamente o código para garantir que todos os parênteses, aspas e chaves estão corretamente fechados. Além disso, evite usar caracteres inválidos ou palavras-chave reservadas, como nomes de variáveis.

NameError: erro de nome em Python

O NameError ocorre quando você tenta acessar uma variável que não existe. Esse erro é comum quando se tenta usar uma variável antes de criá-la ou quando há erros de digitação no nome da variável.

Exemplo de NameError

Usar uma variável antes de criá-la:

print(x)  # NameError: name 'x' is not defined
Testar

Variável que não foi retornada de uma função:

def minha_funcao():
    resultado = 42

minha_funcao()
print(resultado)  # NameError: name 'resultado' is not defined
Testar

Como evitar NameError em Python

Para evitar esse erro, certifique-se de que todas as variáveis estão definidas antes de serem usadas. Verifique também se não há erros de digitação nos nomes das variáveis.

TypeError: erro de tipo de dado em Python

O TypeError ocorre quando o tipo de dado para uma determinada ação está incorreto. Isso pode acontecer em várias situações, como operações com tipos incompatíveis ou argumentos de tipo incorreto para funções.

Exemplo de TypeError

Operações com tipos incompatíveis:

resultado = 10 + '10'  # TypeError: unsupported operand type(s) for +: 'int' and 'str'
Testar

Argumentos de tipo incorreto para funções:

resultado = len(10)  # TypeError: object of type 'int' has no len()
Testar

Modificar objetos imutáveis:

t = (1, 2, 3)
t[0] = 100  # TypeError: 'tuple' object does not support item assignment
Testar

Tentar fazer indexação de tipos de dado que não suportam esta operação:

n = 100
valor = n[0]  # TypeError: 'int' object is not subscriptable
Testar

Tentar “chamar” algo que não é uma função:

n = 100
valor = n()  # TypeError: 'int' object is not callable
Testar

Como evitar TypeError em Python

Para evitar esse erro, certifique-se de que os tipos de dados são compatíveis com as operações que você está tentando realizar. Verifique também se os argumentos passados para as funções são do tipo esperado.

ValueError: erro de valor em Python

O ValueError ocorre quando o tipo de dado está correto, porém seu valor é inválido para uma determinada ação. Esse erro é comum em operações de conversão de tipos e em funções que esperam valores específicos.

Exemplo de ValueError

Conversão de string para inteiro com formato inválido:

int('10.0.1')  # ValueError: invalid literal for int() with base 10: '10.0.1'
Testar

Remover um elemento que não existe em uma lista:

seq = [10, 20, 30]
seq.remove(40)  # ValueError: list.remove(x): x not in list
Testar

Como evitar ValueError em Python

Para evitar esse erro, certifique-se de que os valores passados para as funções são válidos e estão no formato esperado. Verifique também se os elementos que você está tentando acessar ou modificar realmente existem.

IndexError: erro de índice em Python

O IndexError ocorre quando o índice passado para alguma sequência vai além dos seus limites. Esse erro é comum ao tentar acessar elementos de listas, tuplas ou strings com índices inválidos.

Exemplo de IndexError

Acessar um índice fora do alcance de uma lista:

seq = [10, 20, 30]

print(seq[0])
# output: 10

print(seq[10])  # IndexError: list index out of range
Testar

Como evitar IndexError em Python

Para evitar esse erro, certifique-se de que os índices usados para acessar elementos de sequências estão dentro dos limites válidos. Utilize a função len() para verificar o tamanho da sequência antes de acessar seus elementos.

KeyError: erro de chave em Python

O KeyError ocorre quando a chave passada para algum dicionário não existe. Esse erro é comum ao tentar acessar valores em dicionários com chaves inválidas.

Exemplo de KeyError

Acessar uma chave inexistente em um dicionário:

dic = {'chave1': 'valor1', 'chave2': 'valor2'}

print(dic['chave1'])
# output: valor1

print(dic['chave10'])  # KeyError: 'chave10'
Testar

Como evitar KeyError em Python

Para evitar esse erro, certifique-se de que as chaves usadas para acessar valores em dicionários realmente existem. Utilize o método get() dos dicionários para retornar um valor padrão caso a chave não exista.

AttributeError: erro de atributo em Python

O AttributeError ocorre quando tentamos acessar um atributo inexistente de algum objeto. Esse erro é comum ao tentar usar métodos ou atributos que não pertencem ao tipo de dado em questão.

Exemplo de AttributeError

Tentar usar um método inexistente em um tipo de dado:

s = 'Python'
print(s.upper())
# output: PYTHON

x = 100
print(x.upper())  # AttributeError: 'int' object has no attribute 'upper'
Testar

Tentar acessar um método de um valor None:

dic = {'chave1': 'valor1', 'chave2': 'valor2'}

for chave in ['chave1', 'chave2', 'chave3']:
    valor = dic.get(chave)  # Pode retornar None se a chave não existir!
    print(valor.upper())

    # na última iteração...
    # AttributeError: 'NoneType' object has no attribute 'upper'
Testar

Como evitar AttributeError em Python

Para evitar esse erro, certifique-se de que os métodos e atributos que você está tentando acessar realmente existem para o tipo de dado em questão. Para saber como fazer isso, leia este tutorial. Verifique também se os valores não são None antes de tentar acessar seus métodos ou atributos.

ModuleNotFoundError: erro de módulo não encontrado em Python

O ModuleNotFoundError ocorre quando tentamos importar um módulo que não é encontrado pelo Python. Esse erro é comum ao tentar usar bibliotecas que não estão instaladas ou ao tentar importar módulos com nomes incorretos.

Exemplo de ModuleNotFoundError

Tentar importar um módulo inexistente:

import meu_modulo_inexistente

# ModuleNotFoundError: No module named 'meu_modulo_inexistente'
Testar

Como evitar ModuleNotFoundError em Python

Para evitar esse erro, certifique-se de que os módulos que você está tentando importar estão instalados e disponíveis no ambiente de execução. Verifique também se os nomes dos módulos estão corretos e se não há erros de digitação.

Uma causa muito comum é achar que você está em um ambiente Python onde você instalou, enquanto na realidade você está em outro. Se isso acontecer, leia o nosso tutorial sobre como selecionar o interpretador correto de Python no VS Code.

FileNotFoundError: erro de arquivo não encontrado em Python

O FileNotFoundError ocorre quando Python tenta abrir algum arquivo que não é encontrado. Esse erro é comum ao tentar acessar arquivos que não existem ou ao usar caminhos incorretos.

Exemplo de FileNotFoundError

Tentar abrir um arquivo inexistente:

with open('arquivo_inexistente.txt') as arquivo:
    print(arquivo.read())

# FileNotFoundError: [Errno 2] No such file or directory: 'arquivo_inexistente.txt'
Testar

Como evitar FileNotFoundError em Python

Para evitar esse erro, certifique-se de que os arquivos que você está tentando acessar realmente existem e estão no caminho correto. Verifique se os nomes dos arquivos estão corretos, incluindo a extensão, e se o caminho até o arquivo está correto.

Para te ajudar, temos um curso completo sobre leitura e escrita de arquivos em Python, incluindo a manipulação de caminhos com a pathlib – a biblioteca ideal para lidar com caminhos de arquivos em Python.

Conclusão

Compreender os erros mais comuns em Python e saber como evitá-los é essencial para se tornar um programador mais eficiente. Lembre-se de sempre revisar seu código, ler as mensagens de erro com atenção e usar blocos try/except para lidar com exceções de forma adequada.

Com prática e paciência, você se tornará cada vez mais confiante em suas habilidades de programação. Boa sorte e continue praticando!

Imagem de um notebook

Cursos de programação gratuitos com certificado

Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:

  • Conteúdos gratuitos
  • Projetos práticos
  • Certificados
  • +20 mil alunos e comunidade exclusiva
  • Materiais didáticos e download de código
Inicie agora

Comentários

Comentar
Faça parte da discussão Crie sua conta gratuita e compartilhe
sua opinião nos comentários
Entre para a Asimov