2017-09-01 243 views
0

我有点麻烦检查如果瓦尔(对象)是类型字典。如果它的类型的字典不,比它会抛出一个错误做瓦尔(对象):如何检查变量(对象)是否是字典类型?

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

你不能使用类型(增值经销商(对象))如果瓦尔(对象)没有字典。那么你如何检查vars(object)是否是一个冠词?

编辑:在回答下面的答案:

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]) 

回答

3

假设obj__dict__属性,var(obj)将返回dict - 或者如果在某个类上调用,最终将返回dict_proxy。但是dictdict_proxy都没有__dict__,因此vars(vars(obj))明显会增加TypeError - 在内部呼叫中,如果obj不是__dict__,否则在外部呼叫中。

你当然可以用try/except块来处理异常,但是由于这种情况总是会增加,所以这是毫无意义的。所以真正的问题是:为什么你认为你想使用vars(vars(obj))

+0

检查编辑。我试图回答你为什么要使用变量的问题(vars(obj)) – BUInvent

+0

这里是我的完整代码,如果你想看看它:http://www.codesend.com/view/9515db7496c9b3d36fd49231a5684f08/ – BUInvent