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

Perché un xml.etree.ElementTree.Element considerato False?Perché bool (xml.etree.ElementTree.Element) restituisce False?

So che posso fare if e is not None verificare l'esistenza. Ma vorrei fortemente aspettarsi bool(e) per restituire True.

+3

anch'io. Sono rimasto davvero sorpreso quando ho scoperto lo stesso comportamento stamattina ed ero felice di trovare questo thread. – erewok

risposta

27

Come si è visto, Element oggetti sono considerati un valore False se non hanno figli.

ho trovato questo nella fonte:

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 

Anche il commento in linea è d'accordo con voi - questo comportamento è incerto;)

+2

Forse questo dovrebbe essere analogo al fatto che una lista vuota è un oggetto, ma non contiene nulla. Non mi piace, però, perché un elemento con un nome e persino un attributo (e persino il testo all'interno!) È considerato "vuoto". – supergra

+4

Esattamente. Un 'elenco' è un semplice contenitore, cioè definito dai suoi elementi. Questo non è il caso di un 'Elemento', esattamente per le ragioni che hai menzionato. – shx2