基本上我想这样做:
obj = 'str'
type ( obj ) == string
我试着:
type ( obj ) == type ( string )
但这并没有起作用。
还有,其他类型的呢?例如,我无法复制NoneType。
基本上我想这样做:
obj = 'str'
type ( obj ) == string
我试着:
type ( obj ) == type ( string )
但这并没有起作用。
还有,其他类型的呢?例如,我无法复制NoneType。
当前回答
我想这个就可以了
if isinstance(obj, str)
其他回答
首先,避免所有类型比较。它们很少是必要的。有时,它们有助于检查函数中的参数类型——即使这种情况也很少见。错误类型的数据将引发异常,而这正是您所需要的。
所有基本转换函数都将映射为类型函数。
type(9) is int
type(2.5) is float
type('x') is str
type(u'x') is unicode
type(2+3j) is complex
还有其他一些情况。
isinstance( 'x', basestring )
isinstance( u'u', basestring )
isinstance( 9, int )
isinstance( 2.5, float )
isinstance( (2+3j), complex )
顺便说一句,None从来不需要任何这种类型的检查。None是唯一的实例。None对象是一个单例对象。只检查None
variable is None
顺便说一下,一般情况下不要使用上述方法。使用普通异常和Python本身的自然多态。
使用str代替string
type ( obj ) == str
解释
>>> a = "Hello"
>>> type(a)==str
True
>>> type(a)
<type 'str'>
>>>
使用isinstance(object, type)。如上所述,如果你知道正确的类型,这很容易使用,例如,
isinstance('dog', str) ## gives bool True
但对于更深奥的对象,这可能很难使用。 例如:
import numpy as np
a = np.array([1,2,3])
isinstance(a,np.array) ## breaks
但你可以用这个技巧:
y = type(np.array([1]))
isinstance(a,y) ## gives bool True
所以我建议用你想检查的对象类型(例如,type(np.array())实例化一个变量(在本例中是y),然后使用isinstance。
您总是可以使用type(x) == type(y)技巧,其中y是具有已知类型的东西。
# check if x is a regular string
type(x) == type('')
# check if x is an integer
type(x) == type(1)
# check if x is a NoneType
type(x) == type(None)
通常有更好的方法来做到这一点,特别是对于任何最新的python。但如果你只想记住一件事,你可以记住它。
在这种情况下,更好的方法是:
# check if x is a regular string
type(x) == str
# check if x is either a regular string or a unicode string
type(x) in [str, unicode]
# alternatively:
isinstance(x, basestring)
# check if x is an integer
type(x) == int
# check if x is a NoneType
x is None
注意最后一种情况:在python中只有一个NoneType实例,那就是None。你会在异常中看到很多NoneType (TypeError: 'NoneType'对象是不可下标的-发生在我身上..),但你几乎不需要在代码中引用它。
最后,正如fengshaun所指出的,python中的类型检查并不总是一个好主意。更python化的做法是只使用值,就好像它是您所期望的类型一样,并捕获(或允许传播)由此产生的异常。
Type在某些类上不起作用。如果你不确定对象的类型,使用__class__方法,如下所示:
>>>obj = 'a string'
>>>obj.__class__ == str
True
也请参阅这篇文章- http://www.siafoo.net/article/56