Conversão de Tipos em Python: Converta Entre Tipos de Dados
Aprenda conversão de tipos em Python com exemplos claros: converta entre int, float, str, bool e coleções. Abrange casting implícito e explícito.
A conversão de tipos (também chamada de type casting) é o processo de converter um valor de um tipo de dado para outro. Python suporta isso por meio de um conjunto de funções construtoras integradas — int(), float(), str(), bool(), list(), tuple(), set() e outras. Saber quando e como realizar casting é essencial para escrever programas Python corretos e flexíveis.
Este capítulo abrange:
- A diferença entre casting implícito e explícito
- Todas as principais funções de casting integradas com exemplos funcionais
- Conversões de base numérica (
hex,oct,bine de volta) - Conversões de tipos de coleção (
list,tuple,set) - Regras de verdadeiro/falso (truthy/falsy) do boolean e suas armadilhas de casting
- Erros comuns (
TypeError,ValueError) e como evitá-los
Casting Implícito vs Explícito
Python distingue entre dois tipos de conversão de tipos.
Casting Implícito
O casting implícito acontece automaticamente quando Python precisa reconciliar dois tipos compatíveis em uma expressão. Nenhuma chamada de função é necessária — Python promove o tipo "mais estreito" para evitar perda de dados.
O caso mais comum é misturar inteiros e floats em operações aritméticas. Python sempre converte o inteiro para float para que o resultado capture a parte decimal:
Python não converte implicitamente entre tipos não relacionados, como strings e números. Tentar "10" + 5 gera um TypeError. Para esses casos, você precisa de casting explícito.
Casting Explícito
O casting explícito significa chamar uma função construtora para converter um valor manualmente:
O restante deste capítulo cobre cada função importante de casting explícito em detalhes.
Casting Numérico: int(), float(), complex()
int() — Converter para Inteiro
int() aceita inteiros, floats, booleanos e strings numéricas. Ao converter um float, ele trunca (descarta a parte decimal) em vez de arredondar:
# float → int (truncates, does NOT round)
print(int(10.9)) # 10
print(int(-10.9)) # -10
# string → int
print(int("42")) # 42
# bool → int
print(int(True)) # 1
print(int(False)) # 0Observe que int(-10.9) retorna -10, não -11. Python trunca em direção a zero, não em direção ao infinito negativo (isso seria math.floor()).
float() — Converter para Float
float() aceita inteiros, booleanos e strings numéricas (incluindo "inf" e "nan"):
print(float(10)) # 10.0
print(float("3.14")) # 3.14
print(float(True)) # 1.0
print(float("inf")) # infcomplex() — Converter para Número Complexo
complex() cria um número complexo a partir de partes real e imaginária, ou de uma string:
print(complex(3, 4)) # (3+4j)
print(complex("3+4j")) # (3+4j)Casting de String: str()
str() converte quase qualquer objeto Python para sua representação em string. Isso é útil para concatenação e ao construir saídas:
age = 30
message = "I am " + str(age) + " years old."
print(message) # I am 30 years old.
print(str(3.14)) # '3.14'
print(str(True)) # 'True'
print(str(None)) # 'None'Para formatar números dentro de strings, consulte o capítulo sobre f-strings em Python para uma abordagem mais ergonômica.
Casting Booleano: bool() e Valores Truthy/Falsy
bool() converte qualquer valor para True ou False usando as regras de truthy/falsy do Python. Memorizar quais valores são falsy é importante porque as condições em instruções if e loops while dependem das mesmas regras implicitamente.
Valores falsy — todos esses avaliam como False:
print(bool(0)) # False — zero integer
print(bool(0.0)) # False — zero float
print(bool("")) # False — empty string
print(bool([])) # False — empty list
print(bool(None)) # False — NoneValores truthy — todo o resto avalia como True:
print(bool(1)) # True
print(bool(-1)) # True — any non-zero number
print(bool("a")) # True
print(bool([0])) # True — a list with one elementArmadilha comum: Converter uma string para bool sempre retorna True, a menos que a string esteja vazia — até mesmo bool("False") é True. Para verificar se uma string representa um boolean falsy, você deve compará-la explicitamente:
# This is WRONG — bool("False") is True!
user_input = "False"
print(bool(user_input)) # True (non-empty string)
# Correct approach: compare the string
print(user_input.lower() == "true") # FalseConversões de Base Numérica
Analisando Inteiros em Outras Bases com int()
int() aceita um segundo argumento opcional que especifica a base da string de origem. Isso permite analisar literais binários, octais e hexadecimais:
print(int("1010", 2)) # 10 — binary string
print(int("17", 8)) # 15 — octal string
print(int("ff", 16)) # 255 — hexadecimal string
# Pass 0 to auto-detect Python prefix notation
print(int("0b1010", 0)) # 10
print(int("0o17", 0)) # 15
print(int("0xFF", 0)) # 255Convertendo Inteiros para Strings de Base
Python tem três funções integradas que formatam um inteiro como uma string com prefixo de base:
print(bin(10)) # '0b1010'
print(oct(8)) # '0o10'
print(hex(255)) # '0xff'Essas funções retornam strings, não inteiros. Se você precisar da string sem o prefixo, use fatiamento: bin(10)[2:] resulta em '1010'.
Conversões de Tipos de Coleção
Você pode converter entre list, tuple e set usando suas funções construtoras. Converter para set remove duplicatas e perde a ordem:
# list → tuple
coords = [10, 20, 30]
print(tuple(coords)) # (10, 20, 30)
# tuple → list
point = (4, 5, 6)
mutable = list(point)
mutable.append(7)
print(mutable) # [4, 5, 6, 7]
# list → set (removes duplicates)
numbers = [1, 2, 2, 3, 3, 3]
unique = set(numbers)
print(unique) # {1, 2, 3}Converter uma string para uma lista divide-a em caracteres individuais:
print(list("hello")) # ['h', 'e', 'l', 'l', 'o']Todas as Conversões Numéricas e de String: Referência Rápida
Os exemplos abaixo mostram toda a gama de casting numérico e de string em um só lugar:
Python casting numeric
# Converting an integer to a floating-point number
x = 10
y = float(x)
print(y)
# Converting a floating-point number to an integer
x = 10.5
y = int(x)
print(y)
# Converting a string to an integer
x = "10"
y = int(x)
print(y)
# Converting a string to a floating-point number
x = "10.5"
y = float(x)
print(y)
# Converting an integer to a string
x = 10
y = str(x)
print(y)
# Converting a floating-point number to a string
x = 10.5
y = str(x)
print(y)
# Converting a number to a boolean
x = 0
y = bool(x)
print(y)
x = 10
y = bool(x)
print(y)Erros Comuns
TypeError
Um TypeError é gerado quando você passa um tipo que a função não consegue converter de forma alguma — por exemplo, passar uma lista para int():
Python casting unsupported type to int
Saída:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'ValueError
Um ValueError é gerado quando o tipo está correto (por exemplo, uma string) mas o valor não pode ser convertido — por exemplo, uma palavra passada para float():
Python casting string to float
Saída:
ValueError: could not convert string to float: 'hello'Perda de Precisão ao Converter Float para Int
Converter um float para int trunca silenciosamente a parte decimal. Não há aviso — e para números negativos, o comportamento pode ser surpreendente:
Python casting float to int
Saída:
10Se precisar de arredondamento, use round() antes de converter, ou use math.floor() / math.ceil() para controlar a direção explicitamente.
Casting Seguro com try/except
Quando seu programa recebe dados de entrada do usuário, arquivos ou APIs externas, você não pode saber antecipadamente se um valor será convertido com sucesso. Use um bloco try/except para tratar falhas sem travar o programa:
Python safe casting with try/except
Saída:
Conversion failed: invalid literal for int() with base 10: 'hello'
10Esse padrão é especialmente útil ao processar campos de formulário ou linhas de CSV, onde qualquer coluna pode conter dados inesperados.