ValueError: literal no válido para int() con base 10: ''

Resuelto Sarah Cox asked hace 15 años • 0 respuestas

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?

Sarah Cox avatar Dec 04 '09 00:12 Sarah Cox
Aceptado

El mensaje de error significa que la cadena proporcionada intno 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 floatprimero:

>>> int(float('55063.000000'))
55063
FdoBad avatar Jan 20 '2012 21:01 FdoBad

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
Peter avatar Dec 12 '2017 02:12 Peter

intNo 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
SilentGhost avatar Dec 03 '2009 17:12 SilentGhost

Python convertirá el número en un flotante. Simplemente llamar primero a float y luego convertirlo a un int funcionará: output = int(float(input))

Brad123 avatar Apr 23 '2019 03:04 Brad123