如何检查vars(object)是否为字典类型?

时间:2017-09-01 14:44:23

标签: python python-2.7 dictionary

我在检查vars(对象)是否是字典类型时遇到了一些麻烦。如果它不是类型字典,那么它将为执行变量(对象)抛出错误:

if type(vars(vars(self.j)['element'])) is dict:  # exception gets thrown here if not a dictionary
    'this is a dictionary'

如果vars(object)不是字典,则不能使用type(vars(object))。那你怎么检查vars(对象)是否是dictonary?

编辑:回答以下答案:

print type(vars(self.j)['element'])
print isinstance(vars(vars(self.j)['element']), dict)  # this is a dict
print type(vars(self.j)['beverage'])
print isinstance(vars(vars(self.j)['beverage']), dict) # exception thrown because its not a dictionary

输出:

<class '__main__.Element2'>
True
<type 'str'>

    print isinstance(vars(vars(self.j)['beverage']), dict)
TypeError: vars() argument must have __dict__ attribute

编辑:回应布鲁诺,我想做这样的事情:

def are_elements_equal(self, first_element, second_element, msg=None):
    for i in vars(first_element).keys():
        if type(vars(vars(first_element)[i])) is dict:
                self.are_elements_equal(vars(first_element)[i], vars(second_element)[i])
        else:
            self.assertEqual(vars(first_element)[i], vars(second_element)[i])

1 个答案:

答案 0 :(得分:3)

假设obj__dict__属性,var(obj)将返回dict - 如果在类上调用,则最终返回dict_proxy。但是dictdict_proxy都没有__dict__,因此如果vars(vars(obj))TypeErrorobj显然会在内部通话中提出__dict__没有vars(vars(obj)),否则在外线电话中。

你当然可以使用try / except块来处理异常,但是因为这总是会引发异常,所以这将是毫无意义的。所以真正的问题是:为什么你认为你想要使用{{1}}吗?