Trabajar con números almacenados como cadenas es un problema bastante común en Python. Ya sea que se analicen las entradas del usuario, se lean archivos de datos o se obtenga información de las API, a menudo es necesario convertir esas representaciones de cadena en números reales para realizar cálculos. Y, por supuesto, int()
la función de Python es la solución ideal, pero no siempre es tan sencillo como parece. A veces, las cadenas pueden estar en diferentes bases (como binarias o hexadecimales), ser inválidas o incluso contener decimales. Descubrir cómo gestionar todo esto de forma eficiente y segura es la clave para evitar fallos y errores que pueden ser extremadamente frustrantes. Esta guía describe las diferentes maneras de convertir cadenas en enteros en Python, abarcando desde conversiones sencillas hasta casos complejos donde la entrada no es tan clara. Encontrarás algunos consejos sobre cómo trabajar con diferentes sistemas numéricos, gestionar entradas inválidas sin generar excepciones y convertir cadenas de tipo float. El objetivo es convertir esos números en cadenas y prepararlos para los cálculos, sin perder la cabeza en el proceso.
Cómo convertir cadenas en enteros en Python
Método 1: Convertir una cadena decimal en un entero
Esto es lo básico: tu cadena es un número decimal normal, como “42”.Simplemente pásaselo int()
y listo. Algunas cadenas pueden tener comportamientos extraños, sobre todo si contienen espacios u otros caracteres, así que asegúrate de que tu entrada esté limpia o elimínala primero.
s = "42" n = int(s) print(n * 2) # Output: 84
En algunas configuraciones, especialmente con entrada de usuario, puede ser útil añadir gestión de errores (try/except), pero para datos limpios, eso es todo lo que necesitas. Recuerda que si la cadena no es un número correcto, obtendrás un ValueError
.
Método 2: Convertir cadenas en otras bases (binario, hexadecimal, octal)
Si el número se da en otra base, como binaria (“1010”) o hexadecimal (“1A”), entonces hay que indicar int()
qué base usar. Esto sorprende a muchos, ya que al usarla, se usa int("1010")
el decimal por defecto (lo que da 1010, ¡no 10!).
# Binary b = "1010" n = int(b, 2) # Output: 10 # Hexadecimal h = "1A" m = int(h, 16) # Output: 26
Python admite bases del 2 al 36, lo que ofrece mucha flexibilidad. Pero ten cuidado: si no especificas la base correcta, se analizará como decimal, lo que puede generar errores confusos si no prestas atención.
Método 3: Gestionar entradas no válidas de forma segura
Hablando en serio: ¿entradas de usuario o datos desordenados? No siempre serán perfectos. Por eso, encerrar la int()
llamada en un bloque try/except es una solución. Evita que el programa se bloquee con entradas incorrectas como “abc” o “12.3”.
s = "abc" try: n = int(s) print(n) except ValueError: print("Invalid input: cannot convert to integer")
Si solo espera números enteros positivos (por ejemplo, de un archivo), puede comprobarlo con str.isdigit()
. Pero tenga cuidado: isdigit()
no reconoce números negativos ni decimales.
s = "12345" if s.isdigit(): print(int(s)) else: print("Not a pure digit string")
No estoy seguro de por qué, pero en algunas entradas, especialmente las que tienen signos o decimales, isdigit()
simplemente no es suficiente, por lo que la ruta try/except es más segura.
Método 4: Convertir cadenas de tipo flotante en números enteros
¿Alguna vez has visto “88.8” o “12.5” como cadenas? Intentar convertirlas directamente int()
es imposible: Python genera errores. La solución alternativa es convertir primero esa cadena en un valor float y luego convertirla en un entero. Simplifica las cosas, pero ten cuidado: esto trunca hacia cero, por lo que pierdes la parte fraccionaria.
s = "88.8" n = int(float(s)) # Result: 88 (fraction truncated)
Si prefieres redondear al número entero más cercano, intercambia int()
con round()
.
s = "88.8" n = round(float(s)) # Result: 89
Método 5: Convertir una lista de cadenas en números enteros
Al trabajar con listas de cadenas numéricas, no es necesario repetir el bucle manualmente cada vez. Use map() o comprensiones de lista: son prácticas y rápidas.
xs = ["1", "2", "3"] # Using map: nums = list(map(int, xs)) # [1, 2, 3] # Using list comprehension: nums = [int(x) for x in xs]
¿Encontró elementos no válidos? Incorpore la lógica en una función personalizada que try/except
gestione los errores correctamente. Más vale prevenir que curar, sobre todo si su fuente de datos no está completamente limpia.
Errores comunes a tener en cuenta
- ❌ Probando
int()
cadenas no numéricas como activadores “hola”ValueError
. Mejor detectarlo antes de que se bloquee. - ❌ Evite pasar flotantes directamente como “12.5”—conviértalos a flotante primero, luego a int, o obtendrá errores.
- ❌ Olvidando la base: “1010” es decimal 1010 a menos que se especifique base=2. De lo contrario, no es binario.
Reflexiones finales
Convertir cadenas en enteros en Python no es precisamente una tarea compleja, pero comprender cómo gestionar diferentes formatos y posibles errores marca la diferencia entre un script inestable y uno fiable. Ya sea que estés analizando la entrada del usuario, trabajando con datos binarios o limpiando conjuntos de datos desordenados, estas técnicas te brindan un conjunto de herramientas para que todo funcione a la perfección.
Domina estos conceptos y tu código no será tan frágil, sólo un poco más molesto a veces, pero así es la programación, ¿no?