关于python:如何检查变量类型是否为string?

How to check if type of a variable is string?

复制这个网站码到您的网站上以设置一个投票箱在您的网站上。如同

1
isinstance(x,int);

Integer values?


在python 2.x中,您可以

1
isinstance(s, basestring)

basestringstrunicode的抽象超类。它可以用来测试对象是str还是unicode的实例。

在python 3.x中,正确的测试是

1
isinstance(s, str)

在python 3中,bytes类不被认为是字符串类型。


我知道这是一个古老的话题,但是作为第一个出现在谷歌上的话题,如果我没有找到令人满意的答案,我将把它留在这里,以备将来参考:

第六个是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中没有定义basestring,这一小技巧可能有助于使代码兼容:

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)

在这个函数中,我们使用isinstance(object, classinfo)来查看输入是python 3中的str还是python 2中的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中仍然不能工作,因为没有定义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中任何变量的类型,可以使用类型函数。如type('hello'),输出str


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')