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))
Ne pas utiliser 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 devrait être enregistrée comme une int
qui type
ne fera pas l'affaire :
class Spam(int): pass
x = Spam(0)
type(x) == int # False
isinstance(x, int) # True
Ceci est conforme au fort polymorphisme de Python : vous devez autoriser tout objet qui se comporte comme un objet de type int
au lieu d'exiger qu'il en soit un.
MAIS
La mentalité classique de Python, cependant, est que c'est il est plus facile de demander le 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 les résultats de l'exception 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 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 permettrait à exactement ces objets avec les attributs nécessaires et suffisants, mais vous devrez lire les docs sur la façon de l'utiliser.
3 votes
@Hulk : Vous semblez avoir l'impression que
type
est la bonne façon de faire. Ce n'est (presque certainement) pas le cas.0 votes
@katrielalex : s'il avait choisi ma réponse comme étant la bonne ne signifie pas que Hulk avait l'impression que vous mentionnez. Il y a aussi le
ValueError
manière d'exception mentionnée AVANT letype()
.0 votes
@Hulk : Honnêtement, je ne fais pas campagne pour que vous acceptiez ma réponse - s'il vous plaît, n'hésitez pas à la changer pour Ashish ; il a fourni une réponse parfaitement valide et techniquement correcte. Je voulais juste m'assurer que vous aviez lu le reste des conseils sur cette page.
0 votes
@katrielalex : Ashish avait raison, mais les scénarios de codage nécessitaient la clause except et j'ai donc changé ma réponse.
2 votes
@Hulk : Sans vouloir vous offenser. Mais pour être clair, la seule façon d'attraper une exception (à ma connaissance) est d'utiliser une clause except. Je vous ai suggéré d'attraper l'exception
TypeError
exception.20 votes
Cette question est ambiguë, et les réponses sont donc divisées. Certains répondent comment vérifier le type d'une variable (5Vrai, 5.0 Faux), tandis que d'autres répondent comment vérifier que la valeur est un nombre entier (5Vrai, 5.0Vrai, Fraction(5,1)Vrai, 5.4Faux). Peut-être que la question et les réponses devraient être divisées en conséquence ?
0 votes
@S.Lott - Je veux formater ma sortie, avec "{:03.2e}".format(value) pour les virgules flottantes et str(value) pour les entiers.
0 votes
En rapport : stackoverflow.com/questions/21583758/
0 votes
@S.Lott - Il y a une raison très valable pour cela - lorsque vous écrivez des tests et que vous vérifiez si votre valeur est réellement un Integer et où assertIsNone ne testerait pas la condition que vous voudriez tester.
0 votes
C'est une question tout à fait valable. Exemple : vous traitez des données par lots, et la réception d'un nombre non entier dans une ligne fera échouer l'ensemble du lot à un stade ultérieur. Vous voulez identifier le problème avant qu'une exception ne soit levée (et éventuellement lever votre propre exception).
1 votes
La méthode la plus simple (qui fonctionne dans Python 2.7.11) est int(var) == var. Fonctionne avec des flottants de 0,0, renvoie un booléen.
2 votes
Voulez-vous dire "Comment puis-je déterminer si le type d'une variable est un nombre entier ?" ou "Comment puis-je déterminer si la valeur d'une variable est un nombre entier ?".