前两天掉进了一个 Python 的坑。
import xml.etree.ElementTree as ET
s = """<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' cache='directsync' io='native'/>
<source file='/vms/test/centos76-efi'/>
<target dev='vda' bus='virtio'/>
</disk>"""
ele = etree.fromstring(s)
t = ele.find('target') # <Element 'target' at 0x249dc90>
if t: ele.remove(t)
然后发现,’ele.remove(t)’ 没有执行。
原因其实也很简单:
ElementTree.py 对 __bool__() 做了重载1,成了判断 ’ele’ 是否有子节点。
这里,需要改成 ‘if t is not None’。
-
Python2 里是 __nonzero__() ↩︎