Conversión de tipos en Python: Entre tipos de datos
Aprende la conversión de tipos en Python con ejemplos: convierte entre int, float, str, bool y colecciones. Incluye casting implícito, explícito y errores comunes.
La conversión de tipos (también llamada type casting) es el proceso de convertir un valor de un tipo de dato a otro. Python lo admite mediante un conjunto de funciones constructoras integradas: int(), float(), str(), bool(), list(), tuple(), set() y más. Saber cuándo y cómo hacer casting es esencial para escribir programas Python correctos y flexibles.
Este capítulo cubre:
- La diferencia entre casting implícito y explícito
- Todas las funciones de casting integradas más importantes con ejemplos funcionales
- Conversiones numéricas de base (
hex,oct,biny de vuelta) - Conversiones entre tipos de colección (
list,tuple,set) - Reglas de truthy/falsy para boolean y sus errores comunes al hacer casting
- Errores frecuentes (
TypeError,ValueError) y cómo evitarlos
Casting implícito vs. explícito
Python distingue entre dos tipos de conversión de tipos.
Casting implícito
El casting implícito ocurre automáticamente cuando Python necesita reconciliar dos tipos compatibles en una expresión. No se requiere llamar a ninguna función: Python promueve el tipo "más estrecho" para evitar pérdida de datos.
El caso más común es mezclar enteros y flotantes en operaciones aritméticas. Python siempre convierte el entero a float para que el resultado capture la parte decimal:
Python no convierte implícitamente entre tipos no relacionados, como strings y números. Intentar "10" + 5 lanza un TypeError. Para esos casos se necesita casting explícito.
Casting explícito
El casting explícito consiste en llamar a una función constructora para convertir un valor por cuenta propia:
El resto de este capítulo cubre en detalle todas las funciones de casting explícito más importantes.
Casting numérico: int(), float(), complex()
int() — Convertir a entero
int() acepta enteros, flotantes, booleanos y strings numéricos. Al convertir un float, trunca (elimina la parte decimal) en lugar de redondear:
# 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)) # 0Observa que int(-10.9) devuelve -10, no -11. Python trunca hacia cero, no hacia el infinito negativo (eso sería math.floor()).
float() — Convertir a flotante
float() acepta enteros, booleanos y strings numéricos (incluidos "inf" y "nan"):
print(float(10)) # 10.0
print(float("3.14")) # 3.14
print(float(True)) # 1.0
print(float("inf")) # infcomplex() — Convertir a número complejo
complex() construye un número complejo a partir de partes real e imaginaria, o desde un string:
print(complex(3, 4)) # (3+4j)
print(complex("3+4j")) # (3+4j)Casting a string: str()
str() convierte casi cualquier objeto Python a su representación como string. Es útil para concatenación y al construir salidas:
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 dar formato a números dentro de strings, consulta el capítulo sobre f-strings en Python para un enfoque más ergonómico.
Casting a boolean: bool() y valores truthy/falsy
bool() convierte cualquier valor a True o False usando las reglas truthy/falsy de Python. Memorizar qué valores son falsy es importante porque las condiciones en sentencias if y bucles while dependen de las mismas reglas de forma implícita.
Valores falsy — todos estos se evalúan 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 lo demás se evalúa 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 elementError frecuente: Hacer casting de un string a bool siempre devuelve True a menos que el string esté vacío — incluso bool("False") es True. Para verificar si un string representa un boolean falso, debes compararlo explícitamente:
# 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") # FalseConversiones numéricas de base
Parsear enteros en otras bases con int()
int() acepta un segundo argumento opcional que especifica la base del string fuente. Esto permite parsear literales binarios, octales y hexadecimales:
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)) # 255Convertir enteros a strings de base
Python tiene tres funciones integradas que formatean un entero como un string con prefijo de base:
print(bin(10)) # '0b1010'
print(oct(8)) # '0o10'
print(hex(255)) # '0xff'Estas devuelven strings, no enteros. Si necesitas el string sin el prefijo, usa slicing: bin(10)[2:] da '1010'.
Conversiones entre tipos de colección
Puedes convertir entre list, tuple y set usando sus funciones constructoras. Convertir a set elimina duplicados y pierde el orden:
# 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}Convertir un string a lista lo divide en caracteres individuales:
print(list("hello")) # ['h', 'e', 'l', 'l', 'o']Todas las conversiones numéricas y de string: referencia rápida
Los ejemplos a continuación muestran todo el rango de casting numérico y de string en un solo 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)Errores comunes
TypeError
Un TypeError se lanza cuando se pasa un tipo que la función no puede convertir en absoluto — por ejemplo, pasar una lista a int():
Python casting unsupported type to int
Salida:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'ValueError
Un ValueError se lanza cuando el tipo es correcto (por ejemplo, un string) pero el valor no se puede convertir — por ejemplo, una palabra pasada a float():
Python casting string to float
Salida:
ValueError: could not convert string to float: 'hello'Pérdida de precisión al convertir float a int
Convertir un float a int trunca silenciosamente la parte decimal. No hay advertencia — y para números negativos, el comportamiento puede ser sorprendente:
Python casting float to int
Salida:
10Si necesitas redondeo, usa round() antes de hacer casting, o usa math.floor() / math.ceil() para controlar la dirección explícitamente.
Casting seguro con try/except
Cuando tu programa recibe datos de entrada del usuario, archivos o APIs externas, no puedes saber de antemano si un valor se convertirá correctamente. Usa un bloque try/except para manejar los fallos sin que el programa se detenga:
Python safe casting with try/except
Salida:
Conversion failed: invalid literal for int() with base 10: 'hello'
10Este patrón es especialmente útil al procesar campos de formularios o filas de CSV donde cualquier columna puede contener datos inesperados.