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

isinstance(x,int);

对于整数值?


当前回答

总结:

如果你既想要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 3中。X,检查s是否是字符串的正确方法是

isinstance(s, str)

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


在Python 2中。X,正确的检查是

isinstance(s, basestring)

Basestring是STR和unicode的抽象超类。它可以用来测试一个对象是否是str或unicode的实例。

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

s = '123'
issubclass(s.__class__, 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)

使用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))

输出:

真正的 假 真正的 假