10 tipos comuns de erros do Python e como resolvê-los

Como programador, você certamente encontrará erros durante o desenvolvimento de software. Isso pode variar de erros em sua lógica levando a resultados inesperados, erros decorrentes da violação das regras de uma linguagem de programação, até mesmo erros que surgem durante a execução do seu programa, entre muitos outros. Esses erros são comumente referidos como bugs.

Os bugs são onipresentes em todas as linguagens de programação, independentemente de quão fácil seja aprender ou usar o idioma.

Em Python, por exemplo, embora a linguagem enfatize a legibilidade, siga uma sintaxe expressiva e seja considerada relativamente fácil de aprender e usar em comparação com outras linguagens de programação, você ainda não está imune a erros de programação ao usar Python.

Uma vez que erros podem ocorrer, uma boa maneira de lidar com eles é aprender sobre os diferentes tipos de erros que podem ocorrer e como eles ocorrem. Isso permite evitar ou minimizar esses erros durante a programação e também saber como tratá-los quando eles surgem.

Aqui estão alguns dos erros comuns do Python que você pode encontrar ao programar usando a linguagem:

Erros de sintaxe

Um erro de sintaxe é um erro que surge quando você escreve um código que viola as regras da linguagem de programação que está usando. Isso resulta em uma linha de código inválida.

Em Python, por exemplo, ao imprimir uma string, ela precisa ser colocada entre aspas. A falha em fazer isso resulta em um erro de sintaxe.

Um erro de sintaxe também pode surgir quando você não abre ou fecha parênteses, colchetes ou chaves, palavras-chave ou nomes de funções incorretas, dois-pontos no final das instruções de controle de fluxo ou quando você ignora operadores obrigatórios em expressões.

Geralmente, erros de sintaxe surgirão se você violar uma regra sobre como o código Python deve ser escrito.

## syntax error arising from missing quotation mark
## around the string being printed
print("Hello World)

age = 20
## Syntax error arising from missing colon in an if statement
if age > 18
    print("Age is over 18")

## Syntax error because '(' was never closed
def square(x:
    return x * x
print(square(4))

Ao executar o código acima, você encontrará uma mensagem de erro conforme mostrado abaixo:

A mensagem de erro ao executar o código é a seguinte:

  File "/home/madici/Desktop/helloworld.py", line 1
    print("Hello World)
          ^
SyntaxError: unterminated string literal (detected at line 1)

Para resolver esses erros, use a sintaxe correta do Python, conforme mostrado abaixo:

print("Hello World")

age = 20
if age > 18:
    print("Age is over 18")

def square(x):
    return x * x
print(square(4))

IndentationError

Ao contrário de outras linguagens como Java, C ou C++, que usam chaves para separar blocos de código, o Python usa indentação para definir a hierarquia e a estrutura dos blocos de código. Por exemplo, ao escrever instruções de controle em Java, todo o código a ser executado após a avaliação da condição está contido entre chaves.

Em Python, no entanto, o bloco de código será recuado. Um recuo típico em Python consiste em quatro espaços ou uma tabulação. No entanto, o número de espaços não importa, desde que permaneça consistente em todo o código que está sendo escrito.

Como um programador Python, é provável que você encontre erros de indentação ao não adicionar a indentação necessária, como ao escrever instruções ou funções de controle, ao usar tabulações e espaços para criar indentações, pois isso confunde o interpretador, ao inserir indentações no lugar errado ou quando seus recuos não são consistentes em toda a sua base de código.

Um exemplo de código que resulta em um erro de recuo é mostrado abaixo:

age = 20
if age > 18:
print("Age is greater than 18")
   print("You're allowed to drive")
else:
    print("Age is less than 18")

As mensagens de erro resultantes do código acima são mostradas abaixo:

  Venda produtos de uma plataforma para todos os lugares – Shopify

A mensagem de erro ao executar o código é a seguinte:

  File "/home/madici/Desktop/helloworld.py", line 3
    print("Age is greater than 18")
    ^
IndentationError: expected an indented block after 'if' statement on line 2

Para corrigir os erros, é necessário recuar a linha após a instrução if como um recuo e garantir que corresponda ao recuo no restante do código, conforme mostrado abaixo:

age = 20
if age > 18:
   print("Age is greater than 18")
   print("You're allowed to drive")
else:
   print("Age is less than 18")

TypeError

Em Python, um TypeError é uma exceção que surge quando você tenta executar uma operação usando um tipo de dados incompatível. Por exemplo, se você tentar adicionar uma string e um inteiro ou concatenar um tipo de dados de string com um inteiro, encontrará um TypeError.

Você também pode encontrar TypeErrors ao usar funções ou métodos com tipos de dados incorretos, ao tentar usar um índice não inteiro para acessar itens em um iterável, como uma lista, ou ao tentar iterar por meio de um objeto que não pode ser iterável.

Geralmente, qualquer operação usando um tipo de dados incorreto levará a um TypeError.

Exemplos de operações que podem levar a TypeErrors são mostrados abaixo:

# Type Error resulting from concatenating a string an an integer
age = 25
message = "I am " + age + " years old."


list1 = [1, "hello", 5, "world", 18, 2021]
#Type errors resulting from wrong usage of builtin in methods
print(sum(list1))

#TypeError resulting from adding a string and an integer
num1 = 10
num2 = "16"
print(num1 + num2)

#TypeError resulting from using a non integer index
list2 = ["hello", "from", "the", "other", "side"]
print(list2["1"])

As mensagens de erro resultantes do código acima mostrado são mostradas abaixo:

Um exemplo de mensagem TypeError do código é mostrado abaixo:

  File "/home/madici/Desktop/helloworld.py", line 3, in <module>
    message = "I am " + age + " years old."
              ~~~~~~~~^~~~~
TypeError: can only concatenate str (not "int") to str

Para remover os erros, use os tipos de dados corretos ou conversões de tipo conforme mostrado abaixo:

age = 25
message = "I am " + str(age) + " years old."

list1 = [1, 5, 18, 2021]
print(sum(list1))

num1 = 10
num2 = "16"
print(num1 + int(num2))

list2 = ["hello", "from", "the", "other", "side"]
print(list2[1])

AttributeError

Em Python, um AttributeError ocorre quando você tenta usar um atributo que não existe no objeto ou chama um método que não existe no objeto que está sendo chamado. Um AttributeError mostra que um objeto não possui um atributo ou método que está sendo chamado nele.

Por exemplo, se você chamar um método de string em um inteiro, você encontrará um AttributeError porque o método não existe no tipo de objeto que você está chamando.

No exemplo mostrado abaixo, o método capitalize(), que é usado para converter a primeira letra de uma string para maiúscula, está sendo chamado em um inteiro. O resultado é um erro de atributo porque int não tem o método capitalize().

# AttributeError arising from calling capitalize() on an int value
num = 1445
cap = num.capitalize()
print(cap)

A execução desse código resulta na mensagem de erro mostrada abaixo:

A mensagem AttributeError do código é a seguinte:

  File "/home/madici/Desktop/helloworld.py", line 3, in <module>
    cap = num.capitalize()
          ^^^^^^^^^^^^^^
AttributeError: 'int' object has no attribute 'capitalize'

Para resolver um AttributeError, certifique-se de que o método ou atributo que você está chamando existe no tipo de objeto que você está chamando. Nesse caso, chamar capitalize() em um tipo de dados string resolve esse erro conforme mostrado abaixo:

ImportError

O ImportError em Python ocorre quando você tenta importar um módulo que não pode ser encontrado ou não está acessível em seu ambiente atual. Pode ser que ainda não esteja instalado, você não configurou seu caminho corretamente ou digitou errado o módulo que está tentando instalar.

  A tela não liga durante as chamadas devido a um sensor de proximidade quebrado? Aqui estão as correções

Um ImportError tem uma única subclasse filha chamada ModuleNotFoundError, que é o erro gerado quando você tenta importar um módulo que não pode ser encontrado.

Por exemplo, o código abaixo com tentativas de importar os pandas da biblioteca de análise de dados gera esse erro porque o módulo ainda não está instalado.

A mensagem ImportError gerada é mostrada abaixo:

  File "/home/madici/Desktop/helloworld.py", line 1, in <module>
    import pandas
ModuleNotFoundError: No module named 'pandas'

Para resolver esse erro, verifique se os módulos que você está tentando importar foram instalados. Caso isso não resolva o erro, verifique se você está usando a grafia correta do módulo e o caminho correto do arquivo para acessar o módulo.

ValueError

Esta é uma exceção que ocorre quando uma função em Python recebe um valor do tipo de dados correto, mas o valor é um valor inapropriado. Por exemplo, a função Math.sqrt() usada para encontrar a raiz quadrada de valores numéricos retornará um ValueError se você passar um número negativo.

Por mais que o valor seja do tipo correto, ou seja, um valor numérico, ser negativo o torna um valor inadequado para o

A função int() que converte um número ou uma string retornará um ValueError se você passar uma string que não seja um valor string numérico. Passar “123” ou “45” para a função não retorna nenhum erro, pois as strings podem ser convertidas para o valor inteiro apropriado.

No entanto, se você passar uma string que não seja um valor de string numérica, como “Hello”, ela retornará um ValueError. Isso ocorre porque “Hello” embora seja uma string, é inapropriado, pois não possui um equivalente inteiro.

Um exemplo de código que gera um ValueError é mostrado abaixo:

# Value error resulting from inappropriate int value in sqrt()
import math
num = -64
root = math.sqrt(num)
print(root)

# Value error resulting from passing a string with no integer
# equivalent into int() function
numString = "Hello"
num = int(numString)
print(num)

Os erros do código acima são mostrados abaixo:

A mensagem de erro gerada é a seguinte:

  File "/home/madici/Desktop/helloworld.py", line 4, in <module>
    root = math.sqrt(num)
           ^^^^^^^^^^^^^^
ValueError: math domain error

Para corrigir o erro, use os valores apropriados nas funções conforme mostrado abaixo:

import math
num = 64
root = math.sqrt(num)
print(root)

numString = "5231"
num = int(numString)
print(num)

IOError

O IOError(Input/Output Error) é uma exceção que ocorre quando uma operação de entrada ou saída falha. Isso pode ser causado ao tentar acessar um arquivo que não existe, armazenamento em disco insuficiente em seu dispositivo, tentar acessar um arquivo que você não tem permissões suficientes para acessar ou quando você tenta acessar um arquivo que está sendo usado no momento por outras operações.

Métodos como open(), read(), write() e close(), que normalmente são usados ​​ao trabalhar com arquivos, são os que provavelmente causam esse erro.

Considere o código abaixo que tenta abrir um arquivo chamado “notes.txt” que não existe. O código resulta em um IOError que gera o FileNotFoundError:

Com a seguinte mensagem de erro:

  File "/home/madici/Desktop/helloworld.py", line 2, in <module>
    file1 = open("notes.txt", "r")
            ^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'notes.txt'

Para evitar o erro acima, tudo o que você precisa fazer é garantir que o arquivo “notes.txt” exista no diretório em que você está executando o terminal. Outra maneira de lidar com IOErrors é usar o bloco try except, conforme mostrado abaixo:

NameError

O NameError é uma exceção que você encontrará ao tentar usar uma variável, função ou módulo que não existe, não está definido no escopo atual ou não recebeu um valor.

  Como desativar as notificações do Microsoft Teams

Esse erro geralmente ocorre quando você digita incorretamente nomes de variáveis ​​ou funções ou os usa antes de serem definidos. Usar um módulo sem importá-lo também resultará em um NameError.

O código a seguir resultará em uma exceção NameError:

# name error arises because the math module has not been imported
num = 64
root = math.sqrt(64)
print(root)

# NameError arises because x is used before it is defined
y = 23
print(x)

#NameEror because function name is not defined
def greet():
    print("Good morning")
great() #ameError: name 'great' is not defined

As seguintes mensagens de erro resultam do código acima:

Um exemplo de mensagem NameError é mostrado abaixo:

  File "/home/madici/Desktop/helloworld.py", line 3, in <module>
    root = math.sqrt(64)
           ^^^^
NameError: name 'math' is not defined

Para resolver esse NameError, verifique se você não está usando módulos antes de importá-los, não está usando variáveis ​​ou funções antes de defini-las e não está digitando incorretamente nomes de funções ou variáveis:

import math
num = 64
root = math.sqrt(64)
print(root)

y = 23
print(y)

def greet():
    print("Good morning")
greet()

IndexError

Um IndexError é uma exceção que ocorre quando você tenta acessar um índice em uma lista ou tupla que está fora do intervalo. Considere a lista abaixo:

list1 = [1, 2, 3, 4, 5]

A lista tem cinco elementos. Python conta índices de 0 (zero). Portanto, a lista acima possui índices que variam de 0 a n-1, sendo n o número ou elementos da lista. Neste caso, o índice ou a lista irá variar de 0 a 4.

Se você tentar acessar um elemento em um índice maior que 4, encontrará um IndexError porque o índice está fora do intervalo na lista da qual você está tentando acessar um elemento. O código abaixo gera um IndexError:

list1 = [1, 2, 3, 4, 5]
item = list1[6] #IndexError because the list index is out of range
print(item)

O erro do código é mostrado abaixo:

A mensagem IndexError gerada é a seguinte:

  File "/home/madici/Desktop/helloworld.py", line 2, in <module>
    item = list1[6] #IndexError because the list index is out of range
           ~~~~~^^^
IndexError: list index out of range

A melhor maneira de evitar um IndexError é utilizar as funções range() e len() para garantir que você esteja acessando apenas os elementos que estão dentro do intervalo da seguinte forma:

list1 = [1, 2, 3, 4, 5]

for i in range(len(list1)):
    print(list1[i])

KeyError

Um KeyError é uma exceção que ocorre quando você tenta acessar um item de um dicionário usando uma chave e a chave não é encontrada no dicionário. Considere o dicionário abaixo:

cities = {"Canada": "Ottawa", "USA": "Washington", "Italy": "Rome"}

As chaves no dicionário são “Canadá”, “EUA”, “Itália”. Você pode acessar os itens do dicionário de cidades usando as três teclas. No entanto, se você tentar acessar um elemento usando uma chave que não existe, como “Brasil”, você se deparará com um KeyError, conforme mostrado abaixo:

A mensagem KeyError gerada é mostrada abaixo:

  File "/home/madici/Desktop/helloworld.py", line 6, in <module>
    print(cities["Brazil"])
          ~~~~~~^^^^^^^^^^
KeyError: 'Brazil'

Para resolver um KeyError, verifique se as chaves que você está usando para acessar os elementos em um dicionário estão realmente presentes no dicionário. Para fazer isso, você pode fazer uma declaração if…else assim:

cities = {"Canada": "Ottawa", "USA": "Washington", "Italy": "Rome"}

country = "Canada"

if country in cities:
    print("The capital city of " + country + " is " + cities[country])
else:
	print("The key " + country + " is not present in the cities dictionary")

Dessa forma, você evitará encontrar KeyErrors ao acessar elementos de um dicionário

Conclusão

Ao codificar em Python, independentemente do seu nível de especialização, você certamente encontrará erros. Portanto, certifique-se de se familiarizar com os diferentes tipos de erros destacados no artigo para garantir que você seja capaz de lidar com eles quando eles surgirem.

Você também pode explorar alguns one-liners úteis do Python para simplificar tarefas comuns.