Question Comment vérifier si le type d'une variable est une chaîne?


Y a-t-il un moyen de vérifier si le type d'une variable dans python est une chaîne ..

isinstance(x,int);

pour les valeurs entières?


489
2018-01-30 13:32


origine


Réponses:


En Python 2.x, vous feriez

isinstance(s, basestring)

basestring est le superclasse abstraite de str et unicode. Il peut être utilisé pour tester si un objet est une instance de str ou unicode.


Dans Python 3.x, le test correct est

isinstance(s, str)

le bytes La classe n'est pas considérée comme un type de chaîne dans Python 3.


721
2018-01-30 13:33



Je sais que c'est un vieux sujet, mais étant le premier sur Google et étant donné que je ne trouve aucune des réponses satisfaisantes, je vais laisser cela ici pour référence future:

six est une bibliothèque de compatibilité Python 2 et 3 qui couvre déjà ce problème. Vous pouvez alors faire quelque chose comme ceci:

import six

if isinstance(value, six.string_types):
    pass # It's a string !!

Inspecter le code, voici ce que vous trouvez:

import sys

PY3 = sys.version_info[0] == 3

if PY3:
    string_types = str,
else:
    string_types = basestring,

187
2017-12-16 13:36



En Python 3.x ou Python 2.7.6

if type(x) == str:

35
2017-11-09 12:57



Le module type existe également si vous vérifiez plus que ints et strings. http://docs.python.org/library/types.html


14
2018-01-31 02:40



Modifier basé sur une meilleure réponse ci-dessous. Descendez environ 3 réponses et renseignez-vous sur la fraîcheur de la base.

Vieille réponse: Méfiez-vous des chaînes Unicode, que vous pouvez obtenir à partir de plusieurs endroits, y compris tous les appels COM dans Windows.

if isinstance(target, str) or isinstance(target, unicode):

10
2017-11-20 05:30



depuis basestring n'est pas défini dans Python3, cette petite astuce pourrait aider à rendre le code compatible:

try: # check whether python knows about 'basestring'
   basestring
except NameError: # no, it doesn't (it's Python3); use 'str' instead
   basestring=str

après cela, vous pouvez exécuter le test suivant sur Python2 et Python3

isinstance(myvar, basestring)

9
2017-09-17 14:00



Aussi je veux remarquer que si vous voulez vérifier si le type d'une variable est un type spécifique, vous pouvez comparer le type de la variable au type d'un objet connu.

Pour la chaîne, vous pouvez l'utiliser

type(s) == type('')

8
2017-10-19 19:03



Beaucoup de bonnes suggestions fournies par d'autres ici, mais je ne vois pas un bon résumé multi-plateforme. Ce qui suit devrait être une bonne goutte pour n'importe quel programme Python:

def isstring(s):
    # if we use Python 3
    if (sys.version_info[0] >= 3):
        return isinstance(s, str)
    # we use Python 2
    return isinstance(s, basestring)

Dans cette fonction, nous utilisons isinstance(object, classinfo) pour voir si notre contribution est un str en Python 3 ou un basestring en Python 2.


8
2018-03-10 19:58



Python 2/3 incluant unicode

from __future__ import unicode_literals
from builtins import str  #  pip install future
isinstance('asdf', str)   #  True
isinstance(u'asdf', str)  #  True

http://python-future.org/overview.html


6
2018-06-02 02:21



tu peux faire:

var = 1
if type(var) == int:
   print('your variable is an integer')

ou:

var2 = 'this is variable #2'
if type(var2) == str:
    print('your variable is a string')
else:
    print('your variable IS NOT a string')

J'espère que cela t'aides!


6
2017-08-07 11:36



Autre moyen pour Python 2, sans utiliser basetring:

isinstance(s, (str, unicode))

Mais ne fonctionnera toujours pas dans Python 3 depuis unicode n'est pas défini (en Python 3).


5
2017-08-21 18:15