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 MasterClass, 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)
TestarNote 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
TestarNo 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
- 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.
- 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.
- 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
TestarIndentaçã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
TestarComo 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
TestarFalta 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!')
TestarUso de caracteres inválidos ou palavras-chave reservadas como variáveis:
meu!valor = 2 # SyntaxError: invalid syntax
for = 2 # SyntaxError: invalid syntax
TestarComo 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
TestarVariá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
TestarComo 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'
TestarArgumentos de tipo incorreto para funções:
resultado = len(10) # TypeError: object of type 'int' has no len()
TestarModificar objetos imutáveis:
t = (1, 2, 3)
t[0] = 100 # TypeError: 'tuple' object does not support item assignment
TestarTentar 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
TestarTentar “chamar” algo que não é uma função:
n = 100
valor = n() # TypeError: 'int' object is not callable
TestarComo 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'
TestarRemover um elemento que não existe em uma lista:
seq = [10, 20, 30]
seq.remove(40) # ValueError: list.remove(x): x not in list
TestarComo 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
TestarComo 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'
TestarComo 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'
TestarTentar 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'
TestarComo 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'
TestarComo 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'
TestarComo 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!
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
Comentários