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

xml.etree.ElementTree.ElementFalse क्यों माना जाता है?बूल (xml.etree.ElementTree.Element) गलत क्यों मूल्यांकन करता है?

मुझे पता है कि मैं अस्तित्व की जांच के लिए if e is not None कर सकता हूं। लेकिन मैं दृढ़ता सेbool(e)True लौटने की उम्मीद करता हूं।

+3

मैं भी होगा। वास्तव में आश्चर्यचकित था जब मैंने आज सुबह एक ही व्यवहार की खोज की और इस धागे को ढूंढकर खुश था। – erewok

उत्तर

27

यह पता चला है के रूप में, 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

शायद यह इस तथ्य के समान होना चाहिए कि एक खाली सूची एक वस्तु है, लेकिन इसमें कुछ भी नहीं है। मुझे यह पसंद नहीं है, क्योंकि तब एक नाम के साथ एक तत्व और यहां तक ​​कि एक विशेषता (और अंदर भी पाठ!) को "खाली" माना जाता है। – supergra

+4

यह बिल्कुल सही है। एक 'सूची' एक मात्र कंटेनर है, यानी इसके तत्वों द्वारा परिभाषित किया गया है। आपके द्वारा वर्णित कारणों के लिए, 'तत्व' के साथ यह मामला नहीं है। – shx2

11

डॉक्स से:

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

सावधानी: कोई उसके उप-तत्व वाले तत्व के रूप में झूठी परीक्षण किया जाएगा। यह व्यवहार भविष्य के संस्करणों में बदल जाएगा। विशिष्ट लेन (elem) या elem का उपयोग करें इसके बजाय कोई भी परीक्षण नहीं है।

संबंधित मुद्दे