如何检查一个variables的types是string?
有没有办法来检查,如果在Python中的variables的types是string..像
isinstance(x,int);
整数值?
在Python 2.x中,你会这样做
isinstance(s, basestring)
basestring
是str
和unicode
的抽象超类 。 它可以用来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
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数据是格式string或unicode 。 下面的例子将帮助您轻松理解。
>>> 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')