0

我有一个数组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')

解决此问题的最佳方法是什么?

4

1 回答 1

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

getattr如果对象没有该属性,则采用可选的第三个参数设置默认值。

这里有一些注意事项:

为什么其中一些演员缺少属性?它们是否应该具有'none'None其他一些默认值?

由于隐式字符串文字连接,字符串列表容易出现错误。如果您还没有使用 linting 工具,这是获得 linting 工具的众多充分理由之一。

您确定要'none'作为默认值吗?None使用, 或属性预期为任何类型的类似零的值可能更有意义。(如果它们应该是字符串,'none'可能是有道理的。)

于 2013-08-22T23:24:37.787 回答