191 votes

Comment comparer le type d’un objet en Python ?

Fondamentalement, je veux faire ceci :

J'ai essayé :

et n’a pas fonctionné.

EDIT : Merci. Aussi qu’en est-il des autres types ? Comme il y avait NoneType que je ne pourrais pas reproduire.

278voto

anthony Points 15067
<pre><code></code><p><code></code><code></code>.</p><p><a href="http://www.canonical.org/~kragen/isinstance/">http://www.Canonical.org/~Kragen/isInstance/</a></p></pre>

38voto

fengshaun Points 820

``œuvres :

mais, n’oubliez pas : si il ressemble à un canard, et si cela ressemble à un canard, c’est un canard.

EDIT : Pour l’aucun type, vous pouvez simplement faire :

36voto

S.Lott Points 207588

Tout d'abord, éviter tout type de comparaisons. Ils sont très, très rarement nécessaire. Parfois, ils aident à vérifier les types de paramètre dans une fonction, même ce qui est rare. Mauvais type de données génère une exception, et c'est tout ce que vous aurez jamais besoin.

L'ensemble de la base de conversion des fonctions de la carte comme égale à la fonction de type.

type(9) is int
type(2.5) is float
type('x') is str
type(u'x') is unicode
type(2+3j) is complex

Il y a quelques autres cas.

isinstance( 'x', basestring )
isinstance( u'u', basestring )
isinstance( 9, int )
isinstance( 2.5, float )
isinstance( (2+3j), complex )

Aucun, d'ailleurs, jamais besoin de ce genre de vérification de type. None est la seule instance de NoneType. Aucun objet est un Singleton. Il suffit de cocher pour Aucun

variable is None

BTW, ne pas utiliser le ci-dessus en général. Utilisation ordinaire des exceptions et Python naturel de polymorphisme.

24voto

Paolo Bergantino Points 199336

Pour d’autres types, consultez le module de types :

P.S. Les forçaient est une mauvaise idée.

19voto

John Fouhy Points 14700

Vous pouvez toujours utiliser l' type(x) == type(y) astuce, où y est quelque chose avec un type connu.

# check if x is a regular string
type(x) == type('')
# check if x is an integer
type(x) == type(1)
# check if x is a NoneType
type(x) == type(None)

Souvent, il ya de meilleures façons de le faire, en particulier avec toute récente de python. Mais si vous voulez seulement de se rappeler une chose, vous pouvez le rappeler.

Dans ce cas, la meilleure des façons serait:

# check if x is a regular string
type(x) == str
# check if x is either a regular string or a unicode string
type(x) in [str, unicode]
# alternatively:
isinstance(x, basestring)
# check if x is an integer
type(x) == int
# check if x is a NoneType
x is None

Notez que le dernier cas: il n'y a qu'une seule instance d' NoneType en python, et c'est - None. Vous verrez NoneType beaucoup d'exceptions (TypeError: 'NoneType' object is unsubscriptable -- m'arrive tout le temps..) mais vous aurez rarement besoin de s'y référer dans le code.

Enfin, comme fengshaun points de, type de vérification en python n'est pas toujours une bonne idée. C'est plus pythonic d'utiliser seulement la valeur que si c'est le type que vous attendez, et de l'attraper (ou de permettre à la propagation) exceptions qui en résultent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X