我有一個dict
Case
類型的對象的列表,這是dict
發起的。 在Python2中運行時,我可以循環使用鍵和值,以促進兩個Python版本,我使用six
庫。Python3六 - AttributeError:自定義對象沒有屬性'項目'
class Case:
def __init__(self, obj):
properties = {}
# standardize Boolean properties
true_values = ['1', 1, True, 'yes', 'Yes', 'YES']
false_values = ['0', 0, False, 'no', 'No', 'NO']
for (k, v) in iteritems(properties):
# standardize TRUE values
if v in true_values:
properties[k] = True
# standardize FALSE values
elif v in false_values:
properties[k] = False
# keep String values
elif isinstance(v, str):
continue
# remove NULL values
filtered = {k: v for (k, v) in iteritems(properties) if v != None}
# set Case instance attribute for each property
for (k, v) in iteritems(filtered):
setattr(self, k, v)
def __iter__(self):
return self
def __getitem__(self, key):
return self.__dict__.get(key, None)
def to_json(self):
return json.dumps(self, default=lambda o: o.__dict__)
當我遍歷這個名單,我得到一個AttributeError儘管以下six
documentation。
我通過上述對象的列表迭代:
from six import iteritems
def transform(case_list):
for case in case_list:
for (key, value) in iteritems(case): #crashes here
#do stuff
但每次得到一個AttributeError:
Traceback (most recent call last):
File "app/run.py", line 134, in <module>
main()
File "/home/user/other.py", line 55, in transform
for (key, value) in iteritems(case):
File "/home/user/env/lib/python3.4/site-packages/six-1.10.0-py3.4.egg/six.py", line 581, in iteritems
return iter(d.items(**kw))
AttributeError: 'Case' object has no attribute 'items'
我python3 app/run.py
調用它。爲什麼它不能識別迭代器?
你的錯誤消息從您還沒有表現出我們一些完全不同的代碼,你想申請'iteritems'未來到一個'Case'對象。 – user2357112
55行是在'transform'方法中。另一種方法只是用參數調用'transform'是'Case's的列表?對不起,我沒有得到你的提示,你能詳細說明一下嗎? – toefftoefftoeff
'six.iteritems()'是指具有'.items()'方法的對象(即字典),而你的Case對象沒有這樣的方法。實施該方法,它將工作。 –