Python:循环可能有AttributeErrors

时间:2013-08-22 23:21:07

标签: python try-catch hasattr

我有一个数组row。我想将一组对象actor的属性添加到数组中。但是,并非所有参与者都具有每个属性。

我想运行一个循环来添加属性(如果存在),但如果不存在则添加'none'

我似乎找不到使用tryhasattr在循环中进行测试的方法。这是我得到的。当然,它不起作用,因为属性是在循环之外引用的:

for attribute in [actor.x, actor.y, actor.parent, actor.force, actor.hunger, actor.size]:
    try:
        row.append(attribute)
    except AttributeError:
        row.append('none')

最好的方法是什么?

1 个答案:

答案 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'可能有意义。)