W3docs

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, bin y 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— editable, runs on the server

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:

python— editable, runs on the server

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))  # 0

Observa 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"))   # inf

complex() — 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  — None

Valores 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 element

Error 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")  # False

Conversiones 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))   # 255

Convertir 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

python— editable, runs on the server

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

python— editable, runs on the server

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

python— editable, runs on the server

Salida:

10

Si 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

python— editable, runs on the server

Salida:

Conversion failed: invalid literal for int() with base 10: 'hello'
10

Este patrón es especialmente útil al procesar campos de formularios o filas de CSV donde cualquier columna puede contener datos inesperados.

Práctica

Práctica
In Python, how does casting take place and what are its functions?
In Python, how does casting take place and what are its functions?
Was this page helpful?