✯ Présentation
Problème : Correction de
en Python.TypeError: list indices must be integers or slices, not str
Exemple : Le code suivant liste un certain nombre de transactions saisies par l'utilisateur.
t = [5000, 1500, 10000, 20000, 6500, 8000, 9000, 15000, 2000, 16000] n = input('Enter the Number of transactions you want to check: ') for i in n: print(t[i])
Sortie :
Enter the Number of transactions you want to check: 5 Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/rough.py", line 4, in <module> print(t[i]) TypeError: list indices must be integers or slices, not str
Solution : Veuillez ne suivre cette solution qu'après avoir parcouru les scénarios mentionnés ci-dessous .
t = [5000,1500,10000,20000,6500,8000,9000,15000,2000,16000] n = input('Enter the Number of transactions you want to check: ') for i in range(int(n)): print(t[i])
Des bugs comme ceux-ci peuvent être vraiment frustrants ! ? Mais, après avoir fini de lire cet article, ces bogues stupides ne seront plus un sujet de préoccupation pour vous. Par conséquent, pour comprendre ce qui cause de telles erreurs et comment les éviter, il est important de répondre à quelques questions :
- Qu'est-ce qu'un
TypeError
? en Python ? - Pourquoi Python lève-t-il
TypeError: list indices must be integers or slices, not str
? ? - Comment corrige-t-on
TypeError: list indices must be integers or slices, not str
?
✯ Qu'est-ce que TypeError en Python ?
Python génère une TypeError lorsque vous essayez d'utiliser une fonction ou d'appeler un opérateur sur quelque chose dont le type est incorrect.
Il existe des raisons courantes qui sont responsables de l'apparition de TypeError
en Python sont :
- Si vous essayez d'effectuer une certaine opération qui n'est pas prise en charge entre deux types d'objets.
- Si vous essayez d'appeler un appelant/une fonction non appelant.
- Si vous essayez d'itérer sur un identifiant non itératif.
Exemple :
radius = input("Enter the radius: ") # string input print('Circumference = ', 2 * 3.14 * radius)
Sortie :
Enter the radius: 5 Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/TypeError Can’t Multiply Sequence by non-int of Type ‘float’ In Python.py", line 2, in <module> print('Circumference = ',2*3.14*radius) TypeError: can't multiply sequence by non-int of type 'float'
? Explication : Python n'autorise pas la multiplication d'une valeur de chaîne et d'une valeur flottante. Par conséquent, lorsque vous essayez d'effectuer ce type d'opération non prise en charge en Python, cela génère un TypeError
.
Cela nous amène à notre prochaine question !
✨ Pourquoi Python génère-t-il une erreur de type :les indices de liste doivent être des entiers ou des tranches, et non "Str" ?
? Vous pouvez accéder à des éléments dans des types de données séquentiels tels que des chaînes, des tuples et des listes à l'aide de leur index. Maintenant, ces index doivent toujours être des nombres entiers . Lorsque vous essayez d'accéder à l'index de la liste à l'aide d'une valeur de chaîne, alors Python soulève - TypeError: list indices must be integers or slices, not str.
Examinons quelques exemples pour comprendre comment résoudre cette erreur.
✨ Exemple 1
Problème : Le programme suivant vise à attribuer un numéro de matricule à un élève.
roll = [1, 2, 3, 4, 5] name = ['Shubham', 'Chris', 'Yakun', 'Jesus', 'Krishna'] i = input("Enter roll no. : ") print("Name: "+name[i-1]+"\nRoll: "+i)
Sortie :
Enter roll no. : 5 Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/rough.py", line 4, in <module> print("Name: "+name[i]+"\nRoll: "+i) TypeError: list indices must be integers or slices, not str
Plongeons-nous maintenant dans les solutions.
? Solution :accepter l'entrée de l'utilisateur sous forme d'entier
roll = [1, 2, 3, 4, 5] name = ['Shubham', 'Chris', 'Yakun', 'Jesus', 'Krishna'] i = int(input("Enter roll no. : ")) print("Name: "+name[i-1]+"\nRoll: "+str(i))
Sortie :
Enter roll no. : 1 Name: Shubham Roll: 1
Explication :
Pour éviter un TypeError
dans le scénario ci-dessus :
- Acceptez l'entrée de l'utilisateur sous forme d'entier à l'aide de
int()
méthode. - Assurez-vous de concaténer des valeurs du même type de données, c'est-à-dire des chaînes, à l'aide de
str()
méthode.
Passons maintenant à un scénario un peu plus complexe.
✨ Exemple 2
Problème :étant donné une liste de dictionnaires ; comment extraire une certaine valeur en utilisant son index ?
people = [ {'Name': 'Harry', 'phone': '6589', 'address': '90 Eastlake Court' }, { 'Name': 'Ben', 'phone': '5693', 'address': '560 Hartford Drive' }, { 'Name': 'David', 'phone': '8965', 'address': '96 SW 42nd' } ] search = input('Enter the name of the person to find his address: ') for n in (people): if search.lower() in people['Name'].lower(): print('Name: ', search) print('Address: ', people['address']) break else: print('Invalid Entry!')
Sortie :
Enter the name of the person to find his address: harry Traceback (most recent call last): File "D:/PycharmProjects/PythonErrors/rough.py", line 19, in <module> if search.lower() in people['Name'].lower(): TypeError: list indices must be integers or slices, not str
➥ Dans l'exemple ci-dessus, nous avons essayé d'accéder à l'index en utilisant la clé 'Name'
qui est une chaîne. Comme vous ne pouvez pas accéder à un index dans une liste à l'aide d'une chaîne, Python lève donc TypeError: list indices must be integers or slices, not str
.
Voyons maintenant les solutions.
? Méthode 1 :Utilisation de range() + len()
- Pour accéder à un index particulier à l'intérieur de la liste, vous devez trouver la longueur de la liste en utilisant le
len()
méthode. Cette valeur sera un entier. Vous pouvez maintenant utiliser lerange()
sur la fonction de longueur calculée pour itérer sur chaque élément de la liste. - Syntaxe pour accéder à une valeur particulière à partir d'un dictionnaire particulier dans une liste :
list_name[index_of_dictionary]['Key_within_dictionary']
- exemple :-
people[n]['name']
people = [ {'Name': 'Harry', 'phone': '6589', 'address': '90 Eastlake Court' }, { 'Name': 'Ben', 'phone': '5693', 'address': '560 Hartford Drive' }, { 'Name': 'David', 'phone': '8965', 'address': '96 SW 42nd' } ] search = input('Enter the name of the person to find his address: ') for n in range(len(people)): if search.lower() in people[n]['Name'].lower(): print('Name: ', people[n]['Name']) print('Address: ', people[n]['address']) break else: print('Invalid Entry!')
Sortie :
Enter the name of the person to find his address: harry Name: Harry Address: 90 Eastlake Court
? Méthode 2 :Utiliser enumerate()
➥ Pythons intégrés enumerate(iterable)
la fonction vous permet de boucler sur tous les éléments d'un iterable
et leurs compteurs associés.
L'exemple suivant montre comment le enumerate()
intégré de Python permet d'accéder aux éléments d'un dictionnaire au sein d'une liste :
people = [ {'Name': 'Harry', 'phone': '6589', 'address': '90 Eastlake Court' }, { 'Name': 'Ben', 'phone': '5693', 'address': '560 Hartford Drive' }, { 'Name': 'David', 'phone': '8965', 'address': '96 SW 42nd' } ] search = input('Enter the name of the person to find his address: ') for n, name in enumerate(people): if search.lower() in people[n]['Name'].lower(): print('Name: ', people[n]['Name']) print('Address: ', people[n]['address']) break else: print('Invalid Entry!')
Sortie :
Enter the name of the person to find his address: ben Name: Ben Address: 560 Hartford Drive
? Solution 3 :Utiliser la compréhension de liste
Ce n'est peut-être pas la solution la plus Pythonique ou la plus simple des solutions, mais c'est une excellente astuce et un hack rapide pour dériver votre solution en une seule ligne de code.
people = [ {'Name': 'Harry', 'phone': '6589', 'address': '90 Eastlake Court' }, { 'Name': 'Ben', 'phone': '5693', 'address': '560 Hartford Drive' }, { 'Name': 'David', 'phone': '8965', 'address': '96 SW 42nd' } ] search = input('Enter the name of the person to find his address: ') print(next((item for item in people if search.lower() in item["Name"].lower()), 'Invalid Entry!')['address'])
Sortie :
Enter the name of the person to find his address: harry 90 Eastlake Court
Conclusion
J'espère que cet article vous a aidé! ? Veuillez rester à l'écoute et abonnez-vous pour des articles plus passionnants. Bon apprentissage! ?
- Voulez-vous maîtriser rapidement l'IDE Python le plus populaire ?
- Ce cours vous fera passer de débutant à expert en PyCharm en 90 minutes environ.
- Pour tout développeur de logiciels, il est crucial de bien maîtriser l'IDE, d'écrire, de tester et de déboguer un code de haute qualité avec peu d'effort.
Rejoignez la Masterclass PyCharm maintenant, et maîtrisez PyCharm d'ici demain !