Comprendre le système de type de Python est essentiel pour résoudre ce bogue délicat.
Essayer de récupérer des données à partir d'un objet et voir une erreur "l'objet n'est pas inscriptible" à la place? Le problème est que vous indexez le mauvais type de données.
Découvrez tout sur les types inscriptibles et comment résoudre cette erreur.
Que signifie "subscriptable" en Python?
Le terme "inscriptible" en Python signifie un type de données qui stocke plusieurs valeurs auxquelles vous pouvez accéder individuellement. Vous pouvez accéder à une valeur spécifique à partir d'un type de données indicible via son index, en utilisant la notation entre crochets ([]).
Si vous essayez d'accéder aux éléments dans un type de données qui n'est pas indexable, Python déclenche une exception "TypeError: l'objet n'est pas inscriptible".
Les types de données suivants sont inscriptibles en Python: listes, chaînes, tuples et dictionnaires.
liste_exemple = [1, 3, 5, "Idowu"]
string_example = "Idowu Omisola"
tuple_example = (1, 3, 5, "Idowu")
dict_example = {"nom": "Idowu", "Langue": "Yorouba"}
imprimer (list_example[0]) # 1
imprimer (string_example[3]) #w
imprimer (tuple_example[1]) # 3
imprimer (dict_example["nom"]) # Idowu
Cependant, les ensembles, les entiers, les flottants et les booléens sont inaccessibles via l'indexation, ils ne sont donc pas inscriptibles :
float_example = 12.45
int_example = 12367
booléen_exemple = Vrai
ensemble_exemple = {1, 3, 5, "Python"}
imprimer (float_example[1])
print (bool_example[2])
imprimer (int_example[2])
imprimer (set_example[2])
Tenter d'exécuter chacune de ces instructions génère l'exception "l'objet n'est pas inscriptible":
Résolution de l'exception
La résolution de l'exception "l'objet n'est pas inscriptible" est plus facile une fois que vous avez compris les règles d'accès à chaque type de données. Commencez donc votre débogage Python en vérifiant le type de données de l'objet que vous essayez d'indexer.
float_example = 12.45
int_example = 12367
booléen_exemple = Vrai
ensemble_exemple = {1, 3, 5, "Python"}
imprimer (type (float_example)) #
imprimer (type (int_example)) #
print (type (bool_example)) #
imprimer (type (set_example)) #
Une fois que vous avez déterminé que le type de données n'est pas inscriptible, sa conversion en un type indexable résout le problème. Ceci est pratique si les données proviennent de une API tierce. La conversion de types de données comme entier, flottant et booléen en une chaîne les rend inscriptibles :
print (str (float_example)[:2]) # 12
print (chaîne (int_example)[ :2]) # 12
print (str (bool_example)[:2]) #Tr
Vous pouvez même manipuler les chaînes Python résultantes comme tu veux. S'il s'agit d'un entier et d'un flottant, vous souhaiterez peut-être conserver le type de données d'origine dans la sortie. Pour ce faire, convertissez la valeur résultante dans leur type de données d'origine après les avoir indexées en tant que chaînes :
converti_float = float (str (float_example)[:2])
converti_int = int (str (int_example)[ :2])# 12.0 Type de données :
imprimer (converted_float, f'Type de données :{type (converted_float)}')
# 12 Type de données :
imprimer (converted_int, f'Type de données :{type (converted_int)}')
Comme pour un ensemble, vous pouvez le transformer en liste. Bien que vous puissiez convertir un objet défini en une liste à l'aide de la liste (ensemble) Python one-liner, cela ne conserve pas les positions des éléments dans la liste résultante. Pour vous assurer d'obtenir une liste avec des positions d'éléments préservées, utilisez la fonction lambda de Python comme suit :
ensemble_exemple = {1, 3, 5, "Python"}
converti = trié (set_example, key=lambda x: (isinstance (x, str), x))
print (converti[3]) #Python
Maîtriser le débogage Python
Python a une courbe d'apprentissage fluide. Mais de simples exceptions peuvent vous décourager si vous ne savez pas comment y faire face. Apprendre à déboguer votre code et prendre votre temps pour résoudre les problèmes contribue grandement à corriger les erreurs et les exceptions de codage Python.