2017-09-01 2 views
0

Ich habe ein wenig Probleme zu überprüfen, ob Vars (Objekt) vom Typ Wörterbuch ist. Wenn es nicht vom Typ Wörterbuch ist, als wird es einen Fehler zu tun Vars (Objekt) werfen:Wie überprüft man, ob Vars (Objekt) vom Typ Wörterbuch ist?

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

Sie können nicht Typen (VARs (Objekt)), wenn Vars (Objekt) kein Wörterbuch verwenden. Wie überprüft man, ob Vars (Objekt) ein Dikton ist?

edit: in Reaktion auf die Antwort unter:

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 

Ausgang:

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

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

edit: als Antwort auf bruno, möchte ich so etwas wie dies zu tun:

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

Antwort

3

unter der Annahme obj als __dict__ Attribut, var(obj) wird eine 0 zurückgeben- oder eventuell eine dict_proxy wenn eine Klasse aufgerufen wird. Aber weder ein dict noch ein dict_proxy haben eine __dict__, so vars(vars(obj)) wird offensichtlich eine TypeError - im inneren Anruf wenn obj als keine __dict__, sonst in der äußeren Anruf.

Sie könnten natürlich die Ausnahme mit einem Versuch/Ausnahme-Block behandeln, aber da dies immer erhöhen wird, wäre es ziemlich sinnlos. Also das eigentliche Problem ist: warum meinst du, du willst vars(vars(obj)) überhaupt verwenden?

+0

Überprüfen Sie die Bearbeitung. Ich habe versucht, Ihre Frage zu beantworten, warum ich Vars (Vars (Obj)) verwenden möchte – BUInvent

+0

Hier ist mein voller Code, wenn Sie es sehen wollen: http://www.codesend.com/view/9515db7496c9b3d36fd49231a5684f08/ – BUInvent

Verwandte Themen