此代码:
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
答案 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__
方法并告诉你应该如何实际检查它......