web-dev-qa-db-fra.com

Python non inscriptible

Que signifie unsubscriptable dans le contexte d'une TypeError comme dans:

TypeError: 'int' object is unsubscriptable

EDIT: exemple de code court qui entraîne ce phénomène.

a=[[1,2],[5,3],5,[5,6],[2,2]]
for b in a:
    print b[0]

> 1
> 5
> TypeError: 'int' object is unsubscriptable
25
Theodor

Cela signifie que vous avez essayé de traiter un entier comme un tableau. Par exemple:

a = 1337
b = [1,3,3,7]
print b[0] # prints 1
print a[0] # raises your exception
39
kichik

Le problème dans votre exemple de code est que le tableau "a" contient deux types différents: il a 4 listes à 2 éléments et un entier. Vous essayez ensuite de sous-scripter chaque élément de "a", y compris l'élément entier.

En d'autres termes, votre code fait efficacement:

print [1,2][0]
print [5,3][0]
print 5[0]
print [5,6][0]
print [2,2][0]

Cette ligne médiane où il fait "5 [0]" est ce qui génère l'erreur.

13

Vous essayez de rechercher un indice de tableau d'un int:

>>> 1[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is unsubscriptable

Autrement dit, les crochets [] Sont l'opérateur d'indice. Si vous essayez d'appliquer l'opérateur d'indice à un objet qui ne le prend pas en charge (tel que l'implémentation de __getitem__()).

9
camh