lxml元素布尔检查

时间:2014-07-09 18:33:29

标签: python lxml

此代码:

from lxml.html import fromstring, tostring

s = '<span class="left">Whatever</span>'
e = fromstring(s)
print(tostring(e))
print(bool(e))

输出:

<span class="left">Whatever</span>
False

为什么呢?布尔检查如何在这个类中工作?请指出相关文档或代码。

PS
我正在使用lxml 3.3.5

3 个答案:

答案 0 :(得分:4)

Python文档中的相关位置: https://docs.python.org/2/library/stdtypes.html#truth-value-testing

对象的“真实性”由__nonzero__()方法确定,或者如果不存在__len__()方法的结果。由于您的元素没有子元素,即其长度为0,因此将False视为真值。

答案 1 :(得分:2)

XML和HTML不能完全映射到本机python数据结构。没有明确的方法来确定元素对象是否应该等于True或False。

如果您想知道自己是否未能获得元素,请与None进行比较。 E.g:

element is None

如果您想知道您的元素是否有任何子节点,请使用len。 E.g:

len(element) > 0

答案 2 :(得分:0)

这是我用你的代码得到的......

>>> print(bool(e))
__main__:1: FutureWarning: The behavior of this method will change in future ve
sions. Use specific 'len(elem)' or 'elem is not None' test instead.
False
>>> e
<Element span at 0x2db85a0>
>>>

似乎很清楚他们会重载__bool__方法并告诉你应该如何实际检查它......