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

爲什麼xml.etree.ElementTree.Element認爲是False爲什麼bool(xml.etree.ElementTree.Element)的計算結果爲False?

我知道我可以做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 

即使是行內註釋同意你 - 這種行爲是前途未卜;)

+2

也許這應該是類似於空的列表是一個對象,但不包含任何內容的事實。我不喜歡那個,因爲然後一個帶有名字甚至屬性的元素(甚至裏面的文本)被認爲是「空的」。 – supergra

+4

完全正確。 「列表」只是一個容器,即由其元素定義。 'Element'的情況並非如此,這正是你提到的原因。 – shx2

相關問題