Why does bool(xml.etree.ElementTree.Element) evaluate to False?

Question:

import xml.etree.ElementTree as ET
e = ET.Element('Brock',Role="Bodyguard")
print bool(e)

Why is an xml.etree.ElementTree.Element considered False?

I know that I can do if e is not None to check for existence. But I would strongly expect bool(e) to return True.

Asked By: supergra

||

Answers:

From the docs:

http://docs.python.org/library/xml.etree.elementtree.html#element-objects

Caution: Elements with no subelements will test as False. This behavior will change in future versions. Use specific len(elem) or elem is None test instead.

Answered By: John Spong

As it turns out, Element objects are considered a False value if they have no children.

I found this in the source:

def __nonzero__(self):
    warnings.warn(
        "The behavior of this method will change in future versions.  "
        "Use specific 'len(elem)' or 'elem is not None' test instead.",
        FutureWarning, stacklevel=2
        )
    return len(self._children) != 0 # emulate old behaviour, for now

Even the inline comment agrees with you — this behavior is iffy 😉

Answered By: shx2
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.