dir(element)返回不存在的元素。尝试使用getattr(element,...)失败

时间:2015-10-27 09:07:15

标签: python lxml.objectify

基本上我所做的是:

attrs = dir(oe)
for attr in attrs:
  attr_obj = getattr(oe, attr)

  .... more code ...

但是getattr调用失败了:AttributeError: no such child: comment

oeObjectifiedElement库的lxml.objectify

当我使用PyCharm查看oe时,它会显示comment属性,但也无法解析它。

这里发生了什么?如果dir不存在,该属性如何显示?

1 个答案:

答案 0 :(得分:3)

我不是专家,但lxml可能会重新定义__getattr__。从他们的源代码:

def __getattr__(self, tag):
    u"""Return the (first) child with the given tag name.  If no namespace
    is provided, the child will be looked up in the same one as self.
    """
    if is_special_method(tag):
        return object.__getattr__(self, tag)
    return _lookupChildOrRaise(self, tag)

请参阅https://github.com/lxml/lxml/blob/master/src/lxml/lxml.objectify.pyx

此外,关于dir方法,您有:

DIR([对象]) 如果没有参数,则返回当前本地范围中的名称列表。使用参数,尝试返回该对象的有效属性列表。

如果对象具有名为 dir ()的方法,则将调用此方法,并且必须返回属性列表。这允许实现自定义 getattr ()或 getattribute ()函数的对象自定义dir()报告其属性的方式。

如果对象未提供 dir (),则该函数会尽力从对象的 dict 属性(如果已定义)及其类型对象中收集信息。结果列表不一定完整,并且当对象具有自定义 getattr ()时可能不准确。

请参阅https://docs.python.org/2/library/functions.html#dir