检查变量是否是python中的字典 - 使用'is'或==

时间:2014-06-20 05:20:15

标签: python json google-app-engine

总结:我有一个名为'parent'的变量,它是python中的一个字典。我想检查它是否是dict对象。但是,使用"type(parent) is dict"会给我'False'

注意:我的python脚本中加载了以下库:

from google.appengine.ext import ndb

为什么会这样?我首先怀疑是因为这个变量'parent'是使用json库的'loads'方法创建的。

parent = json.loads(self.request.body)

然而,即使我这样创建父母,

parent = {}

我得到与下面观察到的相同的结果:

        print type(parent)
          >> <type 'dict'>
        print type(parent) is dict
          >> False
        print type({}) is type(parent)
          >> True
        print type(parent) == dict
          >> False
        print type({}) == type(parent)
          >> True

这里发生了什么?这是python版本问题吗?或者这与我加载谷歌的应用引擎库的事实有关吗?当我在普通终端中执行以下命令时,没有加载库(Python 2.7.5),我得到以下结果,这是我所期望的:

Python 2.7.5 (default, Sep 12 2013, 21:33:34) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
>>> parent = {}
>>> print type(parent)
<type 'dict'>
>>> print type(parent) is dict
True
>>> print type({}) is dict
True
>>> print type({}) is type(parent)
True
>>> print type({}) == type(parent)
True

提前感谢任何指导!

1 个答案:

答案 0 :(得分:6)

最可能发生的是GAE在幕后使用dict的一些子类。

在python中检查对象是否是类型实例的惯用方法是isinstance()内置函数:

>>> parent = {}
>>> isinstance(parent, dict)
True

...适用于类型本身和子类的实例。