检查变量的类型是否是Python中的特定类型

时间:2013-03-03 15:06:55

标签: python

我想检查变量的类型是否是Python中的特定类型。例如 - 我想检查var x是否为int。

>>x=10
>>type(x)
<type 'int'>

但我怎样才能比较他们的类型。我试过这个,但它似乎没有用。

if type(10)== "<type 'int'>":
    print 'yes'

我该怎么做?

3 个答案:

答案 0 :(得分:4)

使用isinstance() function测试特定类型:

isinstance(x, int)

isinstance()采用单一类型或类型元组进行测试:

isinstance(x, (float, complex, int))
例如,

将测试一系列不同的数字类型。

答案 1 :(得分:3)

你的例子可以写成:

if type(10) is int: # "==" instead of "is" would also work.
    print 'yes'

但请注意,它可能不完全符合您的要求,例如,如果您编写10L或数字大于sys.maxint而非10,则不会打印是,因为long(这是一个这样的数字的类型)不是int

另一种方法是,正如Martijn已经建议的那样,使用isinstance()内置函数如下:

if isinstance(type(10), int):
    print 'yes'

insinstance(instance, Type)不仅会返回True type(instance) is Type,还会返回Type的实例类型。因此,由于boolint的子类,因此这也适用于TrueFalse

但通常最好不要检查特定类型,但对于功能,您需要。也就是说,如果您的代码无法处理该类型,则在尝试对该类型执行不受支持的操作时,它将自动抛出异常。

但是,如果您需要处理,例如整数和浮点数的方式不同,您可能需要检查isinstance(var, numbers.Integral)(需要import numbers),如果True的类型为var,则会int进行评估, longbool或从此类派生的任何用户定义类型。请参阅the standard type hierarchy和[numbers模块]

上的Python文档

答案 2 :(得分:0)

您可以使用以下方式:

>>> isinstance('ss', str)
True
>>> type('ss')
<class 'str'>
>>> type('ss') == str
True
>>> 

int->整数

float->浮点值

列表->列表

元组->元组

dict->字典

对于类,它有些不同: 旧类型的类:

>>> # We want to check if cls is a class
>>> class A:
        pass
>>> type(A)
<type 'classobj'>
>>> type(A) == type(cls)  # This should tell us

新型类:

>>> # We want to check if cls is a class
>>> class B(object):
        pass
>>> type(B)
<type 'type'>
>>> type(cls) == type(B)  # This should tell us


>>> #OR
>>> type(cls) == type # This should tell us