是否有一种方法可以检查python中变量的类型是否为字符串,例如:

isinstance(x,int);

对于整数值?


当前回答

So,

你有很多选项来检查你的变量是否是字符串:

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.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");

根据下面更好的答案进行编辑。向下走大约3个答案,找出basestring的cool值。

旧的回答: 注意unicode字符串,可以从多个地方获得,包括Windows中的所有COM调用。

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

So,

你有很多选项来检查你的变量是否是字符串:

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

这个命令是有目的的。

总结:

如果你既想要Python2又想要Python3,并且还想要包含unicode,似乎没有一种可移植的方法来做到这一点。我最后用了这个习语:

# Near the top of my program
if sys.version_info[0] >= 3:
    basestring = str

然后,任何时候我想测试一个对象,看看它是否是字符串:

if isinstance(obj, basestring):
    ...

坦率地说,Python3删除了basestring和types.StringTypes,这让我有点震惊。我认为没有理由放弃他们,留下他们中的任何一个都会使这个问题得到解决。

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

用Py3代码编写,使用最少的Py2 compat代码。 稍后不中断地删除Py2 compat代码。也就是说,只删除Py3代码,不修改。 避免使用六个或类似的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)