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

isinstance(x,int);

对于整数值?


当前回答

如果检查的不是整型和字符串,类型模块也存在。 http://docs.python.org/library/types.html

其他回答

以下是我对同时支持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)

如果你不想依赖于外部库,这适用于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");

使用type()或isinstance()

我不知道为什么在我面前没有一个答案包含这个简单的类型(my_variable)是str语法,但使用type()这样似乎是最符合逻辑和最简单的,到目前为止:

(在Python3中测试):

# Option 1: check to see if `my_variable` is of type `str`
type(my_variable) is str

# Option 2: check to see if `my_variable` is of type `str`, including
# being a subclass of type `str` (ie: also see if `my_variable` is any object 
# which inherits from `str` as a parent class)
isinstance(my_variable, str)

Python type()内置函数文档在这里:https://docs.python.org/3/library/functions.html#type。它的部分内容如下。注意关于isinstance()的说明:

类类型(对象) 类类型(名称,基础,字典,**kwds) 使用一个参数,返回对象的类型。返回值是一个类型对象,通常与object.__class__返回的对象相同。 建议使用isinstance()内置函数测试对象的类型,因为它考虑了子类。

因此,如果检查的是类对象而不是简单变量的类型,并且需要考虑子类,则使用isinstance()代替。请在这里查看其文档:https://docs.python.org/3/library/functions.html#isinstance。

示例代码:

my_str = "hello"
my_int = 7

print(type(my_str) is str)
print(type(my_int) is str)

print()
print(isinstance(my_str, str))
print(isinstance(my_int, str))

输出:

真正的 假 真正的 假

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

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

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

isinstance(myvar, basestring)

Python 2的另一种方法,不使用basestring:

isinstance(s, (str, unicode))

但仍然不能在Python 3中工作,因为unicode没有定义(在Python 3中)。