[pyar] invalid literal for int() with base 10

fisa fisadev en gmail.com
Sab Dic 17 14:33:21 ART 2011


On Dec 17, 2011 2:08 PM, "Diego Uribe Gamez" <diego.uribe.gamez en gmail.com>
wrote:
>
> Resulta que el problema que tengo es un poco complejo y es que la Lista
que tengo contiene Strings pero en realidad son números.
>
> Intente la función normal de python para convertir todos los Strings en
Enteros:
>
> for i in range(len(self.Cadenastring)):
>     self.Cadenapura = int(self.Cadenastring[i])
>
> Cadenastring = ['2', '012642000444971' , '151938.00' , '0440.132117',
'0.0', '0.0', '171211', '5.5', ]
>
> Error:
> self.Cadenapura = int(self.Cadenastring[i])
> ValueError: invalid literal for int() with base 10: ''
>
> Encontré esta información:
>
> http://docs.python.org/library/string.html
>
> Convert string s to an integer in the given base. The string must consist
of one or more digits, optionally preceded by a sign (+ or -).
The base defaults to 10. If it is 0, a default base is chosen depending on
the leading characters of the string (after stripping the
sign): 0x or 0X means 16, 0 means 8, anything else means 10. If base is 16,
a leading 0x or 0X is always accepted, though not required. This behaves
identically to the built-in function int() when passed a string. (Also
note: for a more flexible interpretation of numeric literals, use the
built-in function eval().)
>
> El problema:
> No se trata de una Lista de números matemáticos, es solo un texto en
con números escritos que debo cambiarles el Type pero no logro hacerlo?

Varias cosas...

1) convirtiendo a int cosas que no son int:
Int es entero. Estás intentando convertir a enteros cosas que tienen
decimales (puntos), o sea que no son enteros.
Ese es el error que te tira.
Pero cuando lo arregles te adelanto que vas a tener más problemas:

2) cómo hacer un for:
Tu for se puede expresar muuuuucho más fácil:

for texto in self.Cadenastring:
    self.Cadenapura = int(texto)

Ese for hace exáctamente lo mismo que tu for. Igual, más allá de que lo
complicaste, tu for esta también mal por algo que explico después:

3) dónde guardás tus números:
Fijate que por cada número, lo intentás convertir a int y lo guardás en
self.Cadenapura.
Pero así siempre pisas lo que hay en Cadenapura! No armaste una lista y vas
agregando tus números convertidos. Directamente tenés una variable donde
vas pisando siempre un único valor. Al final te va a quedar un solo número,
el último convertido.

Para resolver eso tenés que usar listas como ya te expliqué en otro mail:

self.Cadenapura = []
for texto in self.Cadenastring:
    self.Cadenapura.append(int(texto))

O mucho mejor:

self.Cadenapura = [int(t) for t in self.Cadenastring]

Te insisto: estás intentando construir un avión sin entender como funciona
un botón...

> --
>  Diego Alonso Uribe Gamez
> ________________________________
>
> Desarrollador web
>
> Twitter: @DiegoUG
>
> Google+: http://gplus.to/diegoug
>
> ________________________________
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20111217/d866aca5/attachment.html>


More information about the pyar mailing list