python - saber - ¿Cómo comprobar si el tipo de una variable es una cadena?
tipos de variables en python (23)
Aquí está mi respuesta para admitir Python 2 y Python 3 junto con estos requisitos:
- Escrito en código Py3 con un mínimo de código compatible con Py2.
- Elimine el código de compatibilidad Py2 más tarde sin interrupción. Es decir, solo para eliminación, sin modificación del código Py3.
- Evite utilizar un módulo compatible de
six
o similar, ya que tienden a ocultar lo que se está tratando de lograr. - A prueba de futuro para un potencial 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)
¿Hay una manera de verificar si el tipo de una variable en python es cadena ... como
isinstance(x,int);
para valores enteros?
Así es como lo hago:
if type(x) == type(str()):
Asi que,
Tienes muchas opciones para verificar si tu variable es una cadena o no:
a = "my string"
type(a) == str # first
a.__class__ == str # second
isinstance(a, str) # third
str(a) == a # forth
type(a) == type('''') # fifth
Esta orden es para el propósito.
Edición basada en mejor respuesta a continuación. Ir alrededor de 3 respuestas y averiguar acerca de la frescura de la cadena de base.
Respuesta anterior: tenga cuidado con las cadenas Unicode, que puede obtener desde varios lugares, incluidas todas las llamadas COM en Windows.
if isinstance(target, str) or isinstance(target, unicode):
El módulo de tipo también existe si está verificando más de ints y cadenas. http://docs.python.org/library/types.html
En Python 2.x, harías
isinstance(s, basestring)
basestring
es la superclase abstracta de str
y unicode
. Se puede usar para probar si un objeto es una instancia de str
o unicode
.
En Python 3.x, la prueba correcta es
isinstance(s, str)
La clase de bytes
no se considera un tipo de cadena en Python 3.
En Python 3.x o Python 2.7.6
if type(x) == str:
Hay muchas buenas sugerencias proporcionadas por otros aquí, pero no veo un buen resumen multiplataforma. Lo siguiente debería ser una buena introducción para cualquier programa de Python:
var2 = ''this is variable #2''
if type(var2) == str:
print(''your variable is a string'')
else:
print(''your variable IS NOT a string'')
En esta función, usamos isinstance(object, classinfo)
para ver si nuestra entrada es una str
en Python 3 o una basestring
en Python 2.
He visto:
hasattr(s, ''endswith'')
Manera alternativa para Python 2, sin usar la cadena de base:
isinstance(s, (str, unicode))
Pero todavía no funcionará en Python 3 ya que unicode
no está definido (en Python 3).
Para probar si myvar es una cadena, también puede usar esto:
if type(myvar) == str
Para probar si myvar es una cadena, usa esto:
if type(myvar) == type(''abc'')
Python 2/3 incluyendo unicode
from __future__ import unicode_literals
from builtins import str # pip install future
isinstance(''asdf'', str) # True
isinstance(u''asdf'', str) # True
Sé que este es un tema antiguo, pero al ser el primero que se muestra en google y dado que no encuentro ninguna de las respuestas satisfactoria, lo dejo aquí para futuras referencias:
six es una biblioteca de compatibilidad de Python 2 y 3 que ya cubre este problema. Entonces puedes hacer algo como esto:
import six
if isinstance(value, six.string_types):
pass # It''s a string !!
Inspeccionando el código, esto es lo que encuentras:
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str,
else:
string_types = basestring,
Si no desea depender de bibliotecas externas, esto funciona tanto para Python 2.7+ como para 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");
Simplemente puede usar la función isinstance para asegurarse de que los datos de entrada tengan una cadena de formato o unicode . Los siguientes ejemplos te ayudarán a entender fácilmente.
>>> isinstance(''my string'', str)
True
>>> isinstance(12, str)
False
>>> isinstance(''my string'', unicode)
False
>>> isinstance(u''my string'', unicode)
True
También quiero tener en cuenta que si desea comprobar si el tipo de una variable es un tipo específico, puede comparar el tipo de la variable con el tipo de un objeto conocido.
Para cuerdas puedes usar esto
var = 1
if type(var) == int:
print(''your variable is an integer'')
tu puedes hacer:
type(s) == type('''')
o:
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)
¡espero que esto ayude!
basestring
que basestring
no está definido en Python3, este pequeño truco podría ayudar a que el código sea compatible:
try: # check whether python knows about ''basestring''
basestring
except NameError: # no, it doesn''t (it''s Python3); use ''str'' instead
basestring=str
después de eso, puede ejecutar la siguiente prueba tanto en Python2 como en Python3
isinstance(myvar, basestring)
>>> thing = ''foo''
>>> type(thing).__name__ == ''str'' or type(thing).__name__ == ''unicode''
True
a = ''1000'' # also tested for ''abc100'', ''a100bc'', ''100abc''
isinstance(a, str) or isinstance(a, unicode)
devuelve True
type(a) in [str, unicode]
devuelve True
s = ''123''
issubclass(s.__class__, str)
varA = "hey"
if type(varA) == str:
print "it is a string"