Python >> Tutoriel Python >  >> Python

Comment résoudre "TypeError :can only concatenate str (not "int") to str" en Python ?

De nombreux programmeurs débutants ont un problème avec le soi-disant TypeError , ils se demandent ce qu'ils font mal. Voici un exemple :

Exercice :Exécutez le script et reproduisez l'erreur ! Étudiez cet article pour savoir comment résoudre ce problème !

Cet article répondra à toutes les questions que les débutants peuvent se poser sur ce sujet.

À propos de l'erreur de type

Avant de montrer les solutions possibles, nous devons d'abord comprendre pourquoi une telle erreur se produit, nous allons donc répéter les bases. En Python, nous avons plusieurs principaux types de données. Dans cet article, nous allons nous concentrer sur int et str .

Int représente des nombres entiers, par exemple :-523, 123, 23232.

Si nous voulons que notre variable soit du type int type, nous devons l'écrire de cette façon :

integer = 5
print(integer)
print(type(integer))

Le résultat de ce script sera le suivant :

5
<class 'int'>

Comme nous pouvons le voir, notre variable est 'int ".

Str (string) représente toutes sortes de textes, mots, par exemple :'cat' , 'we go to sleep' , '100 years' .

Alors, comment fait-on en Python ?

string = 'cat'
print(string)
print(type(string))

Sortie :

cat
<class 'str'>

Comme vous pouvez le voir, pour que notre programme écrive le mot "cat" , nous devons utiliser des guillemets.

Après avoir répété les bases, vous ne remarquerez peut-être toujours pas l'erreur que vous avez commise, je vais donc vous donner une raison possible de cette erreur.

Quand en Python nous voulons faire des opérations mathématiques, nous devons utiliser des nombres (comme vous le savez certainement), donc nos nombres ne peuvent pas être entre guillemets, à savoir si nous voulons ajouter des nombres, par exemple, 10 et 5 l'un à l'autre, alors en Python cela ressemblera à ceci :

first_integer = 10
second_integer = 5
print(first_integer + second_integer)

Sortie :

15

Un TypeError serait causé par ce script :

first_integer = '10'
second_integer = 5
print(first_integer + second_integer)

Sortie :

Traceback (most recent call last):
  File "location of your python file", line 3, in <module>
    print(first_integer + second_integer)
TypeError: can only concatenate str (not "int") to str

Dans ce script, une erreur s'est produite avec les guillemets, car first_integer est maintenant str pas int , alors comment pouvons-nous résoudre ce problème ?

Correctif 1 :convertir manuellement vers le type de données correct

Vérifiez votre script et localisez une erreur potentielle, puis corrigez cette ligne de code.

Tout d'abord, vous recherchez ce qui aurait pu causer TypeError . Si vous trouvez quelque chose qui, selon vous, a pu entraîner une erreur, par exemple :

variable_name = '10'

Deuxièmement, vous supprimez les guillemets et notre programme devrait fonctionner.

Cependant, cette méthode est inefficace pour les programmes plus complexes, car vous faites tout manuellement.

Correctif 2 :conversion de chaîne

Découvrez dans quelle ligne de code TypeError sont apparus et avant que les variables n'insèrent le type de données qui vous intéresse, lorsque vous souhaitez ajouter des nombres à vous-même, faisons-le :

print(int(first_variable) + int(second_variable))

Ensuite, vous êtes sûr que ce sont les nombres et qu'ils seront certainement ajoutés l'un à l'autre, et lorsque vous voulez ajouter deux mots l'un à l'autre, alors vous le faites :

print(str(first_variable) + str(second_variable))

en utilisant cette méthode, deux sous-titres seront sûrement réunis.

Cependant, cette méthode n'est pas optimale lorsque vous avez beaucoup de données que vous souhaitez combiner entre elles, car vous devez passer beaucoup de temps. Alors, passons à la méthode numéro 3 !

Correctif 3 :Fonction de conversion

Création d'une fonction qui convertit automatiquement un type de variable en un autre type spécifié, à condition que vous sachiez que les variables ne stockent pas de lettres (si vous souhaitez changer leur type en int ). Vous pouvez créer une fonction de base qui ne fonctionne que sur 2 variables :

def change_type(f_variable, s_variable, type_):
    f_variable = type_(f_variable)
    s_variable = type_(s_variable)
    return f_variable, s_variable

first_integer, second_integer = change_type(first_integer, second_integer, str)

print('First use:')
print(type(first_integer))
print(type(second_integer))

first_integer, second_integer = change_type(first_integer, second_integer, int)

print('\nSecond use:')
print(type(first_integer))
print(type(second_integer))

Sortie :

First use:
<class 'str'>
<class 'str'>

Second use:
<class 'int'>
<class 'int'>

Comme nous pouvons le voir, nous avons réussi à changer nos variables au type que nous avons spécifié, d'abord str puis int , afin que nous puissions continuer à écrire le programme.

Mais que se passe-t-il si vous voulez faire une fonction qui fonctionnera par exemple sur 5 variables ? Dans ce cas, vous devez écrire la fonction :

def change_type(list_of_variable_names, type_):
    for x in range(len(list_of_variable_names)):
        list_of_variable_names[x] = type_(list_of_variable_names[x])

first_integer = 2323
second_integer = '2333'
third_integer = '4423'
fourth_integer = 23231
fifth_integer = '-232'

list_of_numbers = [first_integer, second_integer, third_integer, fourth_integer, fifth_integer]
print('Type of values not changed:')
print([type(number) for number in list_of_numbers])
print(list_of_numbers)

print('\nType of values changed to str:')
change_type(list_of_numbers, str)
print([type(number) for number in list_of_numbers])
print(list_of_numbers)

print('\nType of values changed to int:')
change_type(list_of_numbers, int)
print([type(number) for number in list_of_numbers])
print(list_of_numbers)

Sortie :

Type of values not changed:
[<class 'int'>, <class 'str'>, <class 'str'>, <class 'int'>, <class 'str'>]
[2323, '2333', '4423', 23231, '-232']
Type of values changed to str:
[<class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>]
['2323', '2333', '4423', '23231', '-232']
Type of values changed to int:
[<class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>]
[2323, 2333, 4423, 23231, -232]

Ensuite, vous pouvez écraser nos variables afin de pouvoir les utiliser sans liste :

first_integer, second_integer, third_integer, fourth_integer, fifth_integer = list_of_numbers

ou ne pas les écraser et utiliser la liste par ex. opérations mathématiques :

print(list_of_numbers[0] + list_of_numbers[1])

Sortie :

4656

Correction 4 :Utiliser un IDE tel que PyCharm

En utilisant un IDE qui vérifie les erreurs, comme PyCharm. Si vous ne savez pas où se trouve le bogue et que vous n'utilisez pas l'IDE, cela vaut la peine d'en télécharger un pour faciliter la recherche du bogue dans le code.

Cause alternative de TypeError :

Si vous vouliez juste écrire quelque chose comme "I have 3 cats" et vous avez utilisé des plus au lieu de virgules :

x =  'I have'
y = 3
z = 'cats'
print(x + y + z)

Remplacez simplement les plus par des virgules :

print(x, y, z)

Résumé

Nous avons répété les bases du int et str types en Python et découvert que Python ne changera pas le type de variable pour nous, nous devons utiliser le int() ou str() fonctionner nous-mêmes, en fonction de ce que nous voulons réaliser. Cet article fournit également 4 méthodes qui peuvent être utilisées pour empêcher TypeError et une autre raison de cette erreur.

J'espère que cet article de blog vous a aidé à comprendre la cause possible du problème dans votre script.

Sources :

  • https://stackoverflow.com/questions/51252580/how-to-resolve-typeerror-can-only-concatenate-str-not-int-to-str?noredirect=1&lq=1