获取实例列表的属性

时间:2015-12-14 16:49:50

标签: python

我需要在循环中使用实例属性列表,但我找不到解决方案。列表如下:

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'

看起来这么简单的问题,但我仍在苦苦挣扎! 请帮忙。

感谢。

2 个答案:

答案 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