2010-05-12 7 views
29

Je reçois cette erreur en essayant de prendre un entier et précédez « b » pour elle, la convertir en une chaîne:Faire une chaîne hors d'une chaîne et un entier en Python

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

qui est lié à cette fonction:

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

[Cette réponse SO] (https://stackoverflow.com/a/6380529/2071807) explique pourquoi Python ne lance pas simplement le RHS de '+' en un 'str' comme le fait Javascript. C'était assez surprenant pour moi mais cette réponse l'explique bien. – LondonRob

Répondre

34
name = 'b' + str(num) 

ou

name = 'b%s' % num 

comme le note S.Lott, l'opérateur de mingle '%' est obsolète pour Python 3 et plus. Et j'ai volé le nom "mingle" de INTERCAL mais c'est comme ça que j'en parle et que je voulais le voir imprimé au moins une fois auparavant - comme le dodo - il disparaît de la surface de la terre.

+0

Le% est obsolète dans Python 3. Peut vouloir supprimer celui-là. –

+3

@ S.Lott Je dois travailler sur certains systèmes utilisant python <2.6, à savoir Ubuntu 8.04. Je ne m'étais pas rendu compte que .format n'était pas disponible, et après avoir développé le code sur Python 2.6, devoir aller et changer toutes les commandes .format en% était un peu pénible. Donc, en fait, alors que je préfère .format, si vous avez besoin de compatibilité avec chaque version,% est toujours votre meilleur pari - il est présent dans Python 3, tandis que .format n'est pas présent dans python 2.5 et ci-dessous. – JAL

+3

@ S.Lott% n'est pas déprécié dans Python3. [PEP 3101] (https://www.python.org/dev/peps/pep-3101/) mentionne clairement que * Le nouveau système ne se heurte à aucun des noms de méthode des techniques de formatage de chaîne existantes, donc les deux systèmes peut coexister jusqu'à ce qu'il soit temps de déprécier l'ancien système. * –

3

Oui, python n'a pas d'int implicite pour les conversions de chaîne.

essayer str(num) à la place

7

Python ne convertit pas automatiquement les types de la manière que des langages tels que JavaScript ou PHP faire.

Vous devez le convertir en chaîne ou utiliser une méthode de formatage.

name="b"+str(num) 

ou la mise en forme printf ...

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

ou la nouvelle méthode chaîne de .format

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

Le% est obsolète dans Python 3. Peut-être que vous voulez supprimer celui-là. –

+2

Je ne peux pas l'éditer maintenant il semble, ainsi noté ici que% est déprécié. Il convient également de mentionner que .format n'est pas disponible avant Python 2.6. – JAL

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

réponses correctes ont déjà été données, mais je veux carillon et dites que vous devriez toujours utiliser str (var) chaque fois que vous avez l'intention d'utiliser var comme tring, peu importe si vous savez que c'est une chaîne ou non.

Mieux vaut prévenir que guérir.

+0

Mais, quel est le pire qui puisse arriver? Un TypeError? – Kudu