2010-05-12 15 views
29

consigo este error cuando se trata de tomar un entero y anteponer "b" a ella, convirtiéndola en una cadena:Hacer una cadena de una cadena y un entero en Python

File "program.py", line 19, in getname 
    name = "b" + num 
TypeError: Can't convert 'int' object to str implicitly 

que está relacionado con este función:

num = random.randint(1,25) 
name = "b" + num 
+0

[Esta respuesta SO] (https://stackoverflow.com/a/6380529/2071807) aborda por qué Python no solo convierte el RHS de '+' a 'str' como lo hace Javascript. Fue algo sorprendente para mí, pero esa respuesta lo explica bien. – LondonRob

Respuesta

34
name = 'b' + str(num) 

o

name = 'b%s' % num 

como señala S.Lott, el operador de mezcla '%' está en desuso para Python 3 y posteriores. Y robé el nombre "mezclar" de INTERCAL, pero así es como hablo y quería verlo impreso al menos una vez antes, como el dodo, se desvanece de la faz de la tierra.

+0

El% está en desuso en Python 3. Es posible que desee eliminar ese. –

+3

@ S.Lott Tengo que trabajar en algunos sistemas usando python <2.6, es decir, Ubuntu 8.04. No me di cuenta de que .format no estaba disponible, y después de desarrollar el código en Python 2.6, tener que ir y cambiar todos los comandos .format a% fue un poco molesto. Así que, en realidad, aunque prefiero .format, si necesitas compatibilidad con todas las versiones,% sigue siendo tu mejor opción: está presente en Python 3, mientras que .format no está presente en Python 2.5 y versiones posteriores. – JAL

+3

@ S.Lott% no está en desuso en Python3. [PEP 3101] (https://www.python.org/dev/peps/pep-3101/) menciona claramente que * El nuevo sistema no colisiona con ninguno de los nombres de métodos de las técnicas de formateo de cadenas existentes, por lo que ambos sistemas puede coexistir hasta que llegue el momento de desaprobar el sistema anterior. * –

3

Sí, python no tiene int. Implícito a las conversiones de cadena.

tratar str(num) lugar

7

Python no convertirá automáticamente los tipos en la forma en que los lenguajes como JavaScript o PHP hacen.

Tiene que convertirlo en una cadena, o usar un método de formateo.

name="b"+str(num) 

o formato de estilo printf ...

name="b%s" % (num,) 

o la nueva cadena .formato método

name="b{0}".format(num) 
+0

El% está en desuso en Python 3. Es posible que desee eliminar ese. –

+2

No puedo editarlo ahora, parece, por lo que aquí se señala que% está en desuso. También vale la pena mencionar que .format no está disponible antes de Python 2.6. – JAL

1
name = "b{0:d}".format(num) 
2

Las respuestas correctas se han dado ya, pero quiero meter su cuchara y diga que debe siempre use str (var) cada vez que tenga la intención de usar var como tring, independientemente de si sabes que es una cadena o no.

Mejor seguro que lo siento.

+0

Pero, ¿qué es lo peor que puede pasar? Un TypeError? – Kudu

Cuestiones relacionadas