2013-11-21 13 views
20
import xml.etree.ElementTree as ET 
e = ET.Element('Brock',Role="Bodyguard") 
print bool(e) 

Warum wird ein xml.etree.ElementTree.Element als False betrachtet?Warum bewertet bool (xml.etree.ElementTree.Element) False?

Ich weiß, dass ich if e is not None tun kann, um auf Existenz zu prüfen. Aber ich würde stark erwarten bool(e)True zurückgeben.

+3

würde ich auch. War wirklich überrascht, als ich heute Morgen das gleiche Verhalten entdeckte und glücklich war, diesen Thread zu finden. – erewok

Antwort

27

Wie sich herausstellt, sind Element Objekte ein False Wert betrachtet, wenn sie keine Kinder haben.

fand ich dies in der Quelle:

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 

Auch der Inline-Kommentar mit Ihnen stimmt - dieses Verhalten ist strittig;)

+2

Vielleicht sollte das analog zu der Tatsache sein, dass eine leere Liste ein Objekt ist, aber nichts enthält. Das mag ich aber nicht, denn dann wird ein Element mit einem Namen und sogar einem Attribut (und sogar Text drin!) Als "leer" betrachtet. – supergra

+4

Das ist genau richtig. Eine "Liste" ist ein bloßer Container, d. H. Definiert durch seine Elemente. Das ist bei einem Element nicht der Fall, genau aus den von Ihnen genannten Gründen. – shx2

Verwandte Themen