web-dev-qa-db-fra.com

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

Est-il possible de vérifier si le type d'une variable en python est string .. like

isinstance(x,int);

pour les valeurs entières?

567
c_pleaseUpvote

En Python 2.x, vous feriez

isinstance(s, basestring)

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


En Python 3.x, le test correct est

isinstance(s, str)

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

849
Sven Marnach

Je sais que c’est un sujet ancien, mais comme je suis le premier à apparaître sur Google et que je ne trouve aucune réponse satisfaisante, 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 ensuite faire quelque chose comme ceci:

import six

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

En inspectant le code, voici ce que vous trouvez:

import sys

PY3 = sys.version_info[0] == 3

if PY3:
    string_types = str,
else:
    string_types = basestring,
203
André Fratelli

En Python 3.x ou Python 2.7.6

if type(x) == str:
39
Texom512

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

14
dicato

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!

11
F. Taylor

Modifier basé sur une meilleure réponse ci-dessous. Descendez environ 3 réponses et découvrez la fraîcheur de Basestring.

Ancienne réponse: Faites attention aux chaînes Unicode, que vous pouvez obtenir à plusieurs endroits, y compris tous les appels COM dans Windows.

if isinstance(target, str) or isinstance(target, unicode):
10
Wade Hatler

Python 2/3, y compris 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

9
crizCraig

puisque 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
umläute

Beaucoup de bonnes suggestions fournies par d'autres ici, mais je ne vois pas de bon résumé multiplateforme. Ce qui suit devrait être un bon ajout à tout 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 entrée est une str en Python 3 ou une basestring en Python 2.

8
duanev

Je souhaite également que si vous souhaitez vérifier si le type d'une variable est spécifique, vous pouvez comparer le type de la variable au type d'un objet connu.

Pour chaîne, vous pouvez utiliser cette

type(s) == type('')
8
Daniil Grankin

Alors,

Vous avez beaucoup d'options pour vérifier si votre variable est une chaîne ou non:

a = "my string"
type(a) == str # first 
a.__class__ == str # second
isinstance(a, str) # third
str(a) == a # forth
type(a) == type('') # fifth

Cette commande est pour but. 

6
PatNowak
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'

isinstance(a, str) or isinstance(a, unicode)

renvoie True

type(a) in [str, unicode]

renvoie True

5
be_good_do_good

Voie alternative pour Python 2, sans utiliser la corde de base:

isinstance(s, (str, unicode))

Mais cela ne fonctionnera toujours pas dans Python 3 car unicode n’est pas défini (en Python 3).

5
yprez

Voici ma réponse pour supporter à la fois Python 2 et Python 3 avec ces exigences:

  • Écrit en code Py3 avec un code de compatibilité Py2 minimal.
  • Supprimez le code de compatibilité Py2 ultérieurement sans interruption. C'est à dire. visez uniquement la suppression, pas de modification du code Py3.
  • Évitez d’utiliser six ou un module similaire similaire, car ils ont tendance à cacher ce que vous tentez de faire.
  • Avenir pour un potentiel Py4.

import sys
PY2 = sys.version_info.major == 2

# Check if string (lenient for byte-strings on Py2):
isinstance('abc', basestring if PY2 else str)

# Check if strictly a string (unicode-string):
isinstance('abc', unicode if PY2 else str)

# Check if either string (unicode-string) or byte-string:
isinstance('abc', basestring if PY2 else (str, bytes))

# Check for byte-string (Py3 and Py2.7):
isinstance('abc', bytes)
4
Cas

Pour tester si myvar est une chaîne, vous pouvez également utiliser ceci:

if type(myvar) == str
3
Ping

Si vous ne voulez pas dépendre de bibliothèques externes, cela fonctionne à la fois pour Python 2.7+ et Python 3 ( http://ideone.com/uB4Kdc ):

# your code goes here
s = ["test"];
#s = "test";
isString = False;

if(isinstance(s, str)):
    isString = True;
try:
    if(isinstance(s, basestring)):
        isString = True;
except NameError:
    pass;

if(isString):
    print("String");
else:
    print("Not String");
1
mPrinC

Pour vérifier le type de toute variable en python, vous pouvez utiliser la fonction type . type('hello') qui donne la sortie str

0
Hetal Rachh

Vous pouvez simplement utiliser la fonction isinstance pour vous assurer que les données d’entrée sont au format string ou unicode Les exemples ci-dessous vous aideront à comprendre facilement.

>>> isinstance('my string', str)
True
>>> isinstance(12, str)
False
>>> isinstance('my string', unicode)
False
>>> isinstance(u'my string',  unicode)
True
0
Hassan Mehmood