Python 'if'

· 140 words · 1 minute read

前两天掉进了一个 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’。


  1. Python2 里是 __nonzero__() ↩︎

comments powered by Disqus