ValueError: literal no válido para int() con base 10: ''
Recibí este error de mi código:
ValueError: invalid literal for int() with base 10: ''.
¿Qué significa? ¿Por qué ocurre y cómo puedo solucionarlo?
El mensaje de error significa que la cadena proporcionada int
no se pudo analizar como un número entero. La parte al final, después de :
, muestra la cadena que se proporcionó.
En el caso descrito en la pregunta, la entrada fue una cadena vacía , escrita como ''
.
Aquí hay otro ejemplo: una cadena que representa un valor de punto flotante no se puede convertir directamente con int
:
>>> int('55063.000000')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '55063.000000'
En su lugar, convierta al float
primero:
>>> int(float('55063.000000'))
55063
Lo siguiente funciona bien en Python:
>>> int('5') # passing the string representation of an integer to `int`
5
>>> float('5.0') # passing the string representation of a float to `float`
5.0
>>> float('5') # passing the string representation of an integer to `float`
5.0
>>> int(5.0) # passing a float to `int`
5
>>> float(5) # passing an integer to `float`
5.0
Sin embargo, pasar la representación de cadena de un float o cualquier otra cadena que no represente un número entero (incluida, por ejemplo, una cadena vacía como ''
) provocará ValueError
:
>>> int('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
>>> int('5.0')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
Para convertir la representación de cadena de un número de punto flotante a un número entero, primero funcionará convertirlo a un número flotante y luego a un número entero (como se explica en el comentario de @katyhuff sobre la pregunta):
>>> int(float('5.0'))
5
int
No se puede convertir una cadena vacía en un número entero. Si la cadena de entrada puede estar vacía, considere verificar este caso:
if data:
as_int = int(data)
else:
# do something else
o usando el manejo de excepciones:
try:
as_int = int(data)
except ValueError:
# do something else
Python convertirá el número en un flotante. Simplemente llamar primero a float y luego convertirlo a un int funcionará:
output = int(float(input))