如何检查一个variables的types是string?

有没有办法来检查,如果在Python中的variables的types是string..像

isinstance(x,int); 

整数值?

在Python 2.x中,你会这样做

 isinstance(s, basestring) 

basestringstrunicode的抽象超类 。 它可以用来testing一个对象是一个str还是unicode的实例。


在Python 3.x中,正确的testing是

 isinstance(s, str) 

在Python 3中, bytes类不被视为stringtypes。

我知道这是一个老话题,但作为第一个显示在谷歌上,因为我没有find任何满意的答案,我将留在这里以备将来参考:

六是一个Python 2和3兼容性库已经涵盖了这个问题。 然后你可以做这样的事情:

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

检查代码,这是你find的:

 import sys PY3 = sys.version_info[0] == 3 if PY3: string_types = str, else: string_types = basestring, 

在Python 3.x或Python 2.7.6中

 if type(x) == str: 

如果您检查的不仅仅是整数和string,types模块也是存在的。 http://docs.python.org/library/types.html

根据下面的更好的答案编辑。 下来大约3个答案,并找出关于basetring的凉爽。

老答案:注意unicodestring,你可以从几个地方得到,包括Windows中的所有COM调用。

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

由于basestring没有在Python3中定义,这个小技巧可能有助于使代码兼容:

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

之后,您可以在Python2和Python3上运行以下testing

 isinstance(myvar, basestring) 

这里提供了很多好的build议,但是我没有看到一个好的跨平台总结。 对于任何Python程序来说,下面的内容应该是一个好的select:

 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) 

在这个函数中,我们使用isinstance(object, classinfo)来查看我们的input是Python 3中的str还是Python 2中的基础basestring

另外我想要注意的是,如果你想检查一个variables的types是否是一个特定的types,你可以比较variables的types和一个已知对象的types。

对于string,你可以使用这个

 type(s) == type('') 

包括unicode的Python 2/3

 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

Python 2的替代方法,不使用basestring:

 isinstance(s, (str, unicode)) 

但是由于unicode没有定义(在Python 3中),所以仍然不能在Python 3中工作。

 a = '1000' # also tested for 'abc100', 'a100bc', '100abc' isinstance(a, str) or isinstance(a, unicode) 

返回True

 type(a) in [str, unicode] 

返回True

要testingmyvar是否是一个string,也可以使用这个:

 if type(myvar) == str 

所以,

你有很多选项来检查你的variables是否是string:

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

这个命令是为了目的。

这是我的答案,同时支持Python 2和Python 3以及这些要求:

  • 用Py2代码编写的Py3代码。
  • 稍后删除Py2兼容代码而不会中断。 即只针对删除,不修改Py3代码。
  • 避免使用six或类似的compat模块,因为它们倾向于隐藏正在尝试实现的内容。
  • 面向未来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) 

你可以做:

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

要么:

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

希望这可以帮助!

如果你不想依赖外部库,这对Python 2.7+和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"); 

您可以简单地使用isinstance函数来确保input数据是格式stringunicode 。 下面的例子将帮助您轻松理解。

 >>> isinstance('my string', str) True >>> isinstance(12, str) False >>> isinstance('my string', unicode) False >>> isinstance(u'my string', unicode) True 
 s = '123' issubclass(s.__class__, str) 

通过转换为string并用isdigit()进行testing

 >>> not str('baba').isdigit() True >>> not str(123).isdigit() False 

这是我如何做到的:

 if type(x) == type(str()): 
 varA = "hey" if type(varA) == str: print "it is a string" 

我见过:

 hasattr(s, 'endswith') 

要testingmyvar是否是一个string,使用这个:

 if type(myvar) == type('abc')