Подтвердить что ты не робот

Почему bool (xml.etree.ElementTree.Element) оценивается как False?

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

Почему xml.etree.ElementTree.Element считается False?

Я знаю, что я могу сделать if e is not None, чтобы проверить существование. Но я бы сильно ожидал bool(e) для возврата True.

4b9b3361

Ответ 1

Как оказалось, Element объекты считаются значением False, если у них нет детей.

Я нашел это в источнике:

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

Даже встроенный комментарий согласуется с вами - это поведение iffy;)

Ответ 2

Из документов:

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

Внимание: элементы без подэлементов будут проверяться как ложные. Это поведение изменится в будущих версиях. Вместо этого используйте специальный тест len (elem) или elemone.