Почему 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
.
Ответы
Ответ 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.