首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查vars(对象)是否为字典类型?

如何检查vars(对象)是否为字典类型?
EN

Stack Overflow用户
提问于 2017-09-01 14:44:22
回答 1查看 79关注 0票数 0

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

代码语言:javascript
复制
if type(vars(vars(self.j)['element'])) is dict:  # exception gets thrown here if not a dictionary
    'this is a dictionary'

如果vars(object)不是字典,则不能使用类型(vars(Object))。那么,如何检查vars(对象)是否是二叉树呢?

编辑:答复如下:

代码语言:javascript
复制
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

产出:

代码语言:javascript
复制
<class '__main__.Element2'>
True
<type 'str'>

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

编辑:作为对bruno的回应,我想做这样的事情:

代码语言:javascript
复制
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])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-01 14:58:52

假设obj是一个__dict__属性,var(obj)将返回一个dict --如果在类上被调用,最终返回一个dict_proxy。但是,dictdict_proxy都没有__dict__,因此vars(vars(obj))显然会在内部调用中(如果obj不作为__dict__,则在外部调用中引发TypeError )。

当然,您可以使用try/ but块来处理异常,但是由于总是会引发异常,这是完全没有意义的。所以真正的问题是:,为什么,您认为您想要使用vars(vars(obj))呢?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46002756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档