Type()函数不一致

时间:2017-06-16 19:13:23

标签: python-3.x

我正在尝试使用字典中的数据类型来确定操作。

我有一个异构类型的字典:字符串,Nonetype和numpy数组。

我现在的代码如下:

for key in pe.sources['Source 1'].keys():
    if type(pe.sources['Source 1'][key]) == 'numpy.ndarray':
        print("array: %s" %(key))
    else:
        print('attr: %s' %(key))

然后它返回:

attr: TxData
attr: Trellis
attr: Encoded
attr: coding
attr: location
attr: Message
attr: Pcode
attr: gain
attr: message
attr: chemical
attr: bitrate

但是,如果我这样做:

type(pe.sources['Source 1']['TxData'])

它返回:

 numpy.ndarray

为什么我的条件不会触发?

2 个答案:

答案 0 :(得分:1)

不要与字符串进行比较,与类型本身进行比较:

>>> import numpy
>>> a = numpy.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> type(a)
<class 'numpy.ndarray'>
>>> type(a) == 'numpy.ndarray'
False
>>> type(a) == numpy.ndarray
True

str(type(a))也不会工作,因为你实际获得了字符串:

>>> str(type(a))
"<class 'numpy.ndarray'>"

尽管如此,除非您希望完全该类型,否则通常需要isinstance,而不是type(something) == something_else

>>> isinstance(a, numpy.ndarray)
True

答案 1 :(得分:0)

jasonharper的评论修正了它。

&#34; ANYTHING的类型()永远不可能是&numpy.ndarray&#39; - 函数返回类型,而不是类型的名称。尝试没有这些引号(并且您可能需要将numpy部分更改为np或者您导入模块)。&#34;