Python 3.x Type()函数不一致

Python 3.x Type()函数不一致,python-3.x,Python 3.x,我试图使用字典中的数据类型来确定操作 我有一个异构类型的字典:字符串、非类型和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)) 它返回: att

我试图使用字典中的数据类型来确定操作

我有一个异构类型的字典:字符串、非类型和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
 numpy.ndarray
但是,如果我这样做:

type(pe.sources['Source 1']['TxData'])
它返回:

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

为什么我的条件不触发?

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

>>> 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
虽然确实如此,但除非您确实想要该类型,否则通常您想要的是
isinstance
,而不是
type(something)==something\u other

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

贾森·哈珀的评论修正了这个问题


“任何东西的type()都不可能是'numpy.ndarray'-函数返回类型,而不是类型的名称。请在不带引号的情况下尝试(您可能需要将numpy部分更改为np或以导入模块的方式)。”

任何东西都不可能是
'numpy.ndarray'
-函数返回类型,而不是类型的名称。在没有引号的情况下尝试(您可能需要将
numpy
部分更改为
np
,或者以导入模块的方式进行更改)。
\u str\u()
\u repr\u()
之间存在差异。type()不返回字符串,而是返回类型。因此,对照type.DSMs答案(最近编辑)进行检查以使用isinstance是执行此检查的更好方法。isinstance(pe.sources['Source 1'][key],numpy.ndarray)