Comment vérifier si une variable est un nombre entier ?
Si vous devez le faire, faites
isinstance(<var>, int)
à moins que vous ne soyez en Python 2.x, auquel cas vous voulez
isinstance(<var>, (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.
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.
>>> isinstance(3, int)
True
Voir [ici][1] pour en savoir plus.
Notez que cela n’est 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
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 'int'>
>>> type(i) is int
True