如何在使用Python(pytwist)的CSV输出中获取字段内容而不是“<bound method…”

2024-06-11 23:06:45 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码片段正在生成“奇怪”的输出:

for s in servers:
    vo = ss.getServerVO(s)
    values = []
    for f in voFields:
        attribValue = getattr(vo, f)
        values.append(attribValue)
    customValues = ss.getCustomFields(s)
    for f in customFields:
        values.append(customValues[f])
    # Convert all values to string before writing
    values = map(str, values)
    csvFile.writerow( values )

对于customFields字典中的一些-not all-items,我得到以下输出:

^{pr2}$

要使绑定方法执行/将其结果放入我的values字典,我需要做什么?在

(特定上下文是针对HP Server Automation API编写PyTwist脚本)


Tags: 代码infor字典allssvaluesservers
1条回答
网友
1楼 · 发布于 2024-06-11 23:06:45

如果绑定方法是一个,可以尝试调用它:

for f, v in customFields.iteritems():
  try:
    v = v()
  except TypeError:
    pass
  values.append(v)

当然,问题在于设计选择(由HP或其他任何人)将“访问器”与其他类型的值混合使用访问器不是一个好的python选择,应该用属性来代替(在需要时,此“调用”会自动为您实现)。这个建议是关于一种可能的方法来解决这个糟糕的设计选择。在

只是尝试调用,并检查如果值不可调用(或没有参数不可调用)时可能导致的TypeError比使用callable或检查__call__特殊方法要好,因为这些检查永远不会告诉您“无参数调用”是否正常。因此,与Python中的通常情况一样,“通过许可请求原谅”更好:尝试该操作,捕捉可能的错误(“请求原谅”),而不是在尝试之前尝试检查该操作是否允许(“ask permission”)。在

相关问题 更多 >