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?
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.
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,
En Python 3.x ou Python 2.7.6
if type(x) == str:
Le module type existe également si vous vérifiez plus que des ints et des chaînes. http://docs.python.org/library/types.html
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!
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):
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
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)
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.
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('')
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.
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'
isinstance(a, str) or isinstance(a, unicode)
renvoie True
type(a) in [str, unicode]
renvoie True
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).
Voici ma réponse pour supporter à la fois Python 2 et Python 3 avec ces exigences:
six
ou un module similaire similaire, car ils ont tendance à cacher ce que vous tentez de faire.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)
Pour tester si myvar est une chaîne, vous pouvez également utiliser ceci:
if type(myvar) == str
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");
Pour vérifier le type de toute variable en python, vous pouvez utiliser la fonction type . type('hello')
qui donne la sortie str
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