我有一个数组row
。我想将一组对象actor
的属性添加到数组中。但是,并非所有参与者都具有每个属性。
我想运行一个循环来添加属性(如果存在),但如果不存在则添加'none'
。
我似乎找不到使用try
或hasattr
在循环中进行测试的方法。这是我得到的。当然,它不起作用,因为属性是在循环之外引用的:
for attribute in [actor.x, actor.y, actor.parent, actor.force, actor.hunger, actor.size]:
try:
row.append(attribute)
except AttributeError:
row.append('none')
最好的方法是什么?
答案 0 :(得分:4)
for attribute in ['x', 'y', 'parent', 'force', 'hunger', 'size']:
row.append(getattr(actor, attribute, 'none'))
getattr
采用可选的第3个参数设置默认值,如果对象没有该属性。
这里有一些注意事项:
为什么其中一些演员缺少属性?他们应该有'none'
或None
还是其他一些默认值?
由于隐式字符串文字串联,字符串列表容易出错。如果您还没有使用linting工具,这是获得linting工具的众多理由之一。
您确定要'none'
作为默认设置吗?使用None
可能更有意义,或者预期属性的任何类型的零值。 (如果他们被认为是字符串,'none'
可能有意义。)