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

なぜxml.etree.ElementTree.ElementFalseと考えられますか?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

関連する問題