我需要在循环中使用实例属性列表,但我找不到解决方案。列表如下:
widths =
[<__main__.MIZ_info instance at 0x7f6936fc7368>,
<__main__.MIZ_info instance at 0x7f6936ce6d40>,
<__main__.MIZ_info instance at 0x7f6936c4ca28>,
None,
<__main__.MIZ_info instance at 0x7f6936994998>,
<__main__.MIZ_info instance at 0x7f69368d69e0>,
<__main__.MIZ_info instance at 0x7f6936704638>,
None]
现在每个实例都有几个属性(width.property1,width.property2等等),我需要在列表中收集其中一些属性。我尝试了以下但没有取得任何成功:
for n,en in enumerate(widths):
list1.append(en.property1)
list2.append(en.property2)
我遇到过:
AttributeError: 'NoneType' object has no attribute 'property1'
看起来这么简单的问题,但我仍在苦苦挣扎! 请帮忙。
感谢。
答案 0 :(得分:2)
这是因为None
中有widths
项,而None
没有属性en.property1
。您可以通过检查None
s来解决此问题。
for n, en in enumerate(widths):
if en is not None:
list1.append(en.property1)
list2.append(en.property2)
else:
# do something when en is None
答案 1 :(得分:1)
在追加它的属性之前检查en
是否不是None
:
if en != None: #or if en: (equivalent if you don't expect anything else)
list1.append(en.property1)
list2.append(en.property2)
else: #if you want to have placeholders for those None values. If not, take this out
list1.append(None)
list2.append(None)
或者您可以使用try
块来捕获异常:
try:
list1.append(en.property1)
list2.append(en.property2)
except AttributeError:
#do what you need if en is None