Vérifier si une variable est un nombre entier ou non

Comment vérifier si une variable est un nombre entier ?

Solution

Si vous devez le faire, faites

isinstance(, int)

à moins que vous ne soyez en Python 2.x, auquel cas vous voulez

isinstance(, (int, long))

N'utilisez pas type. Ce n'est presque jamais la bonne réponse en Python, car cela bloque toute la flexibilité du polymorphisme. Par exemple, si vous sous-classez int, votre nouvelle classe doit s'enregistrer comme un int, ce que type ne fera pas :

class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True

Ceci est conforme au polymorphisme fort de Python : vous devriez autoriser tout objet qui se comporte comme un int, au lieu d'exiger qu'il en soit un.

BUT

La mentalité classique de Python, cependant, est qu'il est plus facile de demander pardon que la permission. En d'autres termes, ne vérifiez pas si x est un entier ; supposez que c'est le cas et attrapez l'exception qui en résulte si ce n'est pas le cas :

try:
    x += 1
except TypeError:
    ...

Cette mentalité est lentement dépassée par l'utilisation de [classes de base abstraites][1], qui vous permettent d'enregistrer exactement les propriétés que votre objet doit avoir (additionner ? multiplier ? doubler ?) en le faisant hériter d'une classe spécialement construite. Ce serait la meilleure solution, puisqu'elle permet d'obtenir exactement ces objets avec les attributs nécessaires et suffisants, mais vous devrez lire la documentation sur la façon de l'utiliser.

[1] : http://docs.python.org/library/abc.html

Commentaires (14)
>>> isinstance(3, int)
True

Voir [ici][1] pour en savoir plus.

Notez que cela n&#8217est pas utile si vous recherchez des attributs de type int. Dans ce cas, vous voudrez peut-être aussi vérifier la présence de long :

>>> isinstance(3L, (long, int))
True

J'ai vu des vérifications de ce type par rapport à un type de tableau/index dans les sources Python, mais je ne pense pas que cela soit visible en dehors du C.

Réponse de Token SO: Êtes-vous sûr que vous devez vérifier son type ? Soit vous ne passez pas un type que vous ne pouvez pas gérer, soit vous n'essayez pas d'être plus malin que vos éventuels réutilisateurs de code, ils peuvent avoir une bonne raison de ne pas passer un int à votre fonction.

[1] : http://docs.python.org/library/functions.html#isinstance

Commentaires (8)

J'ai trouvé une [question connexe] (https://stackoverflow.com/questions/402504/how-to-determine-the-variable-type-in-python) ici, sur le site SO lui-même.

Les développeurs Python préfèrent ne pas vérifier les types mais effectuer une opération spécifique au type et attraper une exception TypeError. Mais si vous ne connaissez pas le type, vous avez le problème suivant.

>>> i = 12345
>>> type(i)

>>> type(i) is int
True
Commentaires (3)