🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Vença o TypeError do Python! Um Guia Fácil para Superar Erros de "Tipos Incompatíveis"

Olá! A pessoa que escreve este artigo era um completo iniciante há apenas alguns meses, alguém que não sabia nada sobre programação. Com a ajuda da IA, agora eu administro dois sites por conta própria.

Ao aprender a programar, todo mundo eventualmente se depara com aquelas mensagens de erro em vermelho. O "TypeError", em particular, pode ser muito confuso e desanimador no início. Eu também passei por isso.

Mas não se preocupe. Neste artigo, com base nos meus próprios tropeços, explicarei "O que é um TypeError?" e "Como posso resolvê-lo?" da maneira mais simples possível, evitando jargões o máximo que puder. Ao terminar de ler este artigo, você não temerá mais os TypeErrors; você os verá como "aliados" úteis que dão dicas para a solução!


Para começar, o que é um "TypeError"? 🤔

Vamos começar com um teste rápido. Você consegue fazer o seguinte cálculo?

"o número 10" + "a palavra 'reais'"

Intuitivamente, você pode pensar "10 reais". Agora, que tal este?

"o número 10" + "a palavra 'maçãs'"

...Você não pode realmente calcular isso, pode? "10 maçãs"? Não faz sentido como um cálculo.

Na verdade, o Python lida exatamente com o mesmo problema. Para o Python, um número (em termos técnicos, `int` ou `float`) e um texto (em termos técnicos, `str`) são coisas completamente diferentes. Assim como uma pessoa não pode somar "o número 10" e "a palavra 'maçãs'", o Python entra em pânico quando você tenta misturar diferentes tipos de dados em um cálculo, pensando: "Eu não sei que tipo de dado usar para este cálculo!"

Este "pânico devido a tipos de dados incompatíveis" é a verdadeira identidade de um `TypeError`. A mensagem de erro é um sinal gentil que nos diz: "Mestre! O Tipo (Type) de dado que você está tentando calcular é diferente, então é um Erro (Error)!"


[Prática] Vamos Experimentar e Vencer um TypeError Comum!

Agora que você tem uma ideia geral da teoria, vamos experimentar um `TypeError` com código real e ver o processo de resolvê-lo. Apenas seguindo estas instruções passo a passo, você pegará o jeito de resolver erros.

Caso 1: Tentando conectar um número e um texto com "+"

Primeiro, vamos ver o padrão mais comum. Suponha que você escreveu o seguinte código para criar uma frase informando sua idade.

❌ Código que causa um erro

Se você copiar e executar este código, ocorrerá um `TypeError`.

idade = 30
print("Eu tenho " + idade + " anos.")
# Resultado da execução:
# Traceback (most recent call last):
#   File "<stdin>", line 1, in <module>
# TypeError: can only concatenate str (not "int") to str


Aí está, o `TypeError`. Vamos olhar para o final da mensagem de erro.
TypeError: can only concatenate str (not "int") to str
Isso significa: "Você só pode concatenar (juntar) um `str` (texto) a outro `str` (não a um `int` (inteiro)!)." O Python está nos dizendo: "Não posso somar diretamente o texto 'Eu tenho ' e o número `30`!"


🕵️‍♂️ Investigando a causa: Vamos verificar se os tipos são realmente diferentes

Descobrimos que a causa do erro são os "tipos incompatíveis". Agora, vamos perguntar diretamente ao Python para confirmar. Para verificar o tipo de uma variável, podemos usar a útil função `type()`.

texto = "Eu tenho "
idade = 30

print( type(texto) )
print( type(idade) )

# Resultado da execução:
# <class 'str'>
# <class 'int'>


Como você pode ver, `texto` é um texto (`str`) e `idade` é um inteiro (`int`). Isso confirma que os tipos são, de fato, diferentes.


✅ Solução 1: Transforme o número em texto com `str()`

Depois de saber a causa, o resto é fácil. Só precisamos transformar o número `idade` em um texto. A mágica para isso é a função `str()`. Ao envolver uma variável em `str()`, você pode converter qualquer tipo em um texto.

idade = 30
# Use str() para converter o inteiro 'idade' em um texto!
print("Eu tenho " + str(idade) + " anos.")

# Resultado da execução:
# Eu tenho 30 anos.


Conseguimos! Foi exibido corretamente sem nenhum erro. Esta é a maneira básica de vencer um `TypeError`.


✅ Solução 2 (Recomendada): Resolva de forma inteligente com f-strings!

Você pode resolver isso com `str()`, mas existe uma maneira mais moderna e legível. É chamada de "f-string".

Basta colocar um `f` antes da aspa de abertura do texto e colocar o nome da variável entre chaves `{}`. É tudo o que é preciso para o Python converter automaticamente a variável em um texto e incorporá-la de forma elegante. Não há necessidade de juntar com `+` ou converter com `str()`.

idade = 30
# Usar uma f-string torna tudo tão limpo!
print(f"Eu tenho {idade} anos.")

# Resultado da execução:
# Eu tenho 30 anos.


O que você acha? Desta forma, o código é mais curto, mais intuitivo e mais fácil de entender. De agora em diante, eu recomendo fortemente o uso de f-strings ao combinar textos e variáveis!


Caso 2: A armadilha do `input()` com a entrada do usuário

Em sites e aplicativos, há muitas situações em que você precisa obter uma entrada de um usuário. Para receber a entrada do usuário em Python, você usa a função `input()`, mas há uma grande armadilha aqui.

❌ Código que causa um erro

Vamos escrever um código que pergunta ao usuário o ano de nascimento e calcula a idade atual (a partir de 2025).

ano_nascimento = input("Por favor, digite seu ano de nascimento (ex: 1995): ")
idade = 2025 - ano_nascimento
print(f"Você tem {idade} anos!")

# Execução (ex: digitando 1995):
# Por favor, digite seu ano de nascimento (ex: 1995): 1995
#
# Resultado da execução:
# Traceback (most recent call last):
#   File "<stdin>", line 2, in <module>
# TypeError: unsupported operand type(s) for -: 'int' and 'str'


Outro `TypeError`. Desta vez, a mensagem é unsupported operand type(s) for -: 'int' and 'str'. Está dizendo: "Para a operação `-` (subtração), a combinação de `int` (número) e `str` (texto) não é suportada."

Você pode estar pensando: "Ué? Eu digitei 1995, então por que é um texto?" Este é o ponto crucial.

Qualquer valor recebido da função `input()` é tratado como um texto (`str`), mesmo que pareça um número.

Esta é uma regra absoluta em Python, então é melhor memorizá-la. Uma verificação rápida com `type()` deixa isso bem claro.

ano_nascimento = input("Por favor, digite seu ano de nascimento (ex: 1995): ")
print(f"O tipo do dado inserido é: {type(ano_nascimento)}")

# Execução (ex: digitando 1995):
# Por favor, digite seu ano de nascimento (ex: 1995): 1995
#
# Resultado da execução:
# O tipo do dado inserido é: <class 'str'>

✅ Solução: Transforme o texto em um número com `int()`

A causa foi que `ano_nascimento` se tornou um texto (`str`) por causa do `input()`. Para realizar um cálculo, precisamos transformá-lo em um número (`int`).

É aí que a função `int()` entra. É o oposto de `str()`. Vamos envolver o valor recebido de `input()` completamente em `int()`.

# Converta imediatamente o resultado do input() para um inteiro com int()!
ano_nascimento_str = input("Por favor, digite seu ano de nascimento (ex: 1995): ")
ano_nascimento_int = int(ano_nascimento_str)

idade = 2025 - ano_nascimento_int
print(f"Você tem aproximadamente {idade} anos!")

# Execução (ex: digitando 1995):
# Por favor, digite seu ano de nascimento (ex: 1995): 1995
#
# Resultado da execução:
# Você tem aproximadamente 30 anos!


Calculou perfeitamente! Ao usar `input()`, converta-o com `int()` antes de calcular. Se você se lembrar dessa combinação, não terá nada a temer.


[Aprendendo na Era da IA] Apenas Pergunte a uma IA sobre seu TypeError!

A razão pela qual consegui superar o estágio de iniciante em programação tão rapidamente foi porque eu tinha a IA como minha parceira. Mesmo que uma mensagem de erro apareça, não há necessidade de entrar em pânico. Hoje, você tem um assistente de IA brilhante ao seu lado o tempo todo.

Quando você receber um erro, copie o "código que causou o erro" e a "mensagem de erro completa" e tente perguntar a uma IA assim:

[O Prompt Mágico (Pergunta)]

Ao executar o seguinte código Python, recebi um erro.
Por favor, explique a causa deste erro e como corrigi-lo de uma forma que seja fácil para um iniciante em programação entender, usando exemplos específicos.

▼ Código
```python # Cole seu código que causou o erro aqui idade = 30 print("Eu tenho " + idade + " anos.") ```

▼ Mensagem de Erro
``` # Cole a mensagem de erro completa aqui Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str ```


Se você perguntar assim, a IA deve explicar pacientemente "por que o erro ocorreu" e "como corrigi-lo", assim como expliquei neste artigo. Vamos aproveitar ao máximo a IA como a melhor ferramenta de aprendizado que transforma erros em oportunidades de crescimento!


Resumo: TypeError é seu Amigo 🤝

Desta vez, cobrimos a identidade e a derrota do `TypeError` que faz tantos iniciantes tropeçarem. Finalmente, vamos rever os pontos-chave.

Um erro é uma dica gentil que aponta um engano em seu código. Uma vez que você consiga ver um `TypeError` e pensar, "Ok, hora de verificar os tipos", você se graduou de ser um iniciante. Você encontrará muitos mais erros no futuro, mas ao resolvê-los um por um, você definitivamente subirá de nível. Estou torcendo por você!

Para o Próximo Passo

Para você que dominou o `TypeError`. A seguir, por que não desafiar outro erro complicado, o "texto corrompido" (mojibake), que você frequentemente encontra ao ler ou escrever arquivos? Uma vez que você entende a causa, este também não é assustador.

Próximo Artigo: Como Lidar com o UnicodeDecodeError (Texto Corrompido) »