How to check if type of a variable is string?
复制这个网站码到您的网站上以设置一个投票箱在您的网站上。如同
1 | isinstance(x,int); |
Integer values?
在python 2.x中,您可以
1 | isinstance(s, basestring) |
在python 3.x中,正确的测试是
1 | isinstance(s, str) |
在python 3中,
我知道这是一个古老的话题,但是作为第一个出现在谷歌上的话题,如果我没有找到令人满意的答案,我将把它留在这里,以备将来参考:
第六个是python 2和3兼容库,它已经涵盖了这个问题。然后您可以这样做:
1 2 3 4 | import six if isinstance(value, six.string_types): pass # It's a string !! |
检查代码,您会发现:
1 2 3 4 5 6 7 8 | import sys PY3 = sys.version_info[0] == 3 if PY3: string_types = str, else: string_types = basestring, |
在python 3.x或python 2.7.6中
1 | if type(x) == str: |
如果您检查的不仅仅是整数和字符串,那么类型模块也存在。http://docs.python.org/library/types.html网站
你可以做到:
1 2 3 | var = 1 if type(var) == int: print('your variable is an integer') |
或:
1 2 3 4 5 | var2 = 'this is variable #2' if type(var2) == str: print('your variable is a string') else: print('your variable IS NOT a string') |
希望这有帮助!
根据下面更好的答案进行编辑。记下3个答案,找出基弦的凉爽程度。
老回答:注意Unicode字符串,您可以从多个地方获得,包括Windows中的所有COM调用。
1 | if isinstance(target, str) or isinstance(target, unicode): |
由于python3中没有定义
1 2 3 4 | try: # check whether python knows about 'basestring' basestring except NameError: # no, it doesn't (it's Python3); use 'str' instead basestring=str |
之后,您可以在python2和python3上运行以下测试
1 | isinstance(myvar, basestring) |
python 2/3,包括unicode
1 2 3 4 | 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
另外,我还要注意,如果您想检查变量的类型是否是特定的类型,您可以将变量的类型与已知对象的类型进行比较。
对于字符串,可以使用此
1 | type(s) == type('') |
这里有很多其他人提供的好建议,但是我没有看到一个好的跨平台总结。对于任何python程序来说,以下内容都是一个很好的切入点:
1 2 3 4 5 6 | 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) |
在这个函数中,我们使用
所以,
您有很多选项可以检查变量是否为字符串:
1 2 3 4 5 6 | a ="my string" type(a) == str # first a.__class__ == str # second isinstance(a, str) # third str(a) == a # forth type(a) == type('') # fifth |
此订单为目的。
1 2 3 | a = '1000' # also tested for 'abc100', 'a100bc', '100abc' isinstance(a, str) or isinstance(a, unicode) |
返回真
1 | type(a) in [str, unicode] |
返回真
不使用basestring的python 2的替代方法:
1 | isinstance(s, (str, unicode)) |
但在python 3中仍然不能工作,因为没有定义
下面是我对支持python 2和python 3以及这些要求的答案:
- 用PY3代码编写,最小的PY2兼容代码。
- 稍后删除py2 compat代码而不中断。也就是说,仅限于删除,不修改PY3代码。
- 避免使用
six 或类似的兼容模块,因为它们往往隐藏正在努力实现。 - 潜在PY4的未来证据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) |
要测试myvar是否是字符串,还可以使用以下方法:
1 | if type(myvar) == str |
如果您不想依赖外部libs,这对python 2.7+和python 3都有效(http://ideone.com/ub4kdc):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 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函数来确保输入数据是格式字符串或Unicode。下面的例子将帮助您轻松理解。
1 2 3 4 5 6 7 8 | >>> isinstance('my string', str) True >>> isinstance(12, str) False >>> isinstance('my string', unicode) False >>> isinstance(u'my string', unicode) True |
要检查python中任何变量的类型,可以使用类型函数。如
1 2 | s = '123' issubclass(s.__class__, str) |
我就是这样做的:
1 | if type(x) == type(str()): |
1 2 3 | varA ="hey" if type(varA) == str: print"it is a string" |
我见过:
1 | hasattr(s, 'endswith') |
1 2 3 | >>> thing = 'foo' >>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode' True |
要测试myvar是否为字符串,请使用以下命令:
1 | if type(myvar) == type('abc') |