TypeError:无法在 ElementTree 中序列化 None(类型 NoneType)来替代 if 语句

G M*_*G M 6 elementtree typeerror python-3.x

当我尝试将属性设置为 None 时,我在 ElementTree 模块的文档中找不到避免出现“TypeError:无法序列化 None (type NoneType)”的实用解决方案。像这儿:

import xml.etree.ElementTree as ET
myvar = None
p = ET.Element('test')
b = ET.SubElement(p, 'tt')
b.set("last_update",myvar)
tree = ET.ElementTree(p)
tree.write('test.xml')
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用一系列,if myvar is not None: ...但我必须多次重复 if 语句。我想知道如果属性的值为 None ,是否有办法完全避免写入该属性。

Mig*_*uel 0

None我通过子例程解决了这个问题,从树中删除所有属性。只需在任何序列化之前调用此函数即可。

def removeNoneAttrib(elem):
    """Remove None attributes from XML tree"""
    elem.attrib = {
        k: elem.attrib[k]
        for k in elem.attrib
        if elem.attrib[k] is not None
    }
    for subelem in elem:
        removeNoneAttrib(subelem)
Run Code Online (Sandbox Code Playgroud)

例子:

# ... the same as your code until the last line
removeNoneAttrib(tree.getroot())
tree.write('test.xml')
Run Code Online (Sandbox Code Playgroud)

注意:如果您对表格进行了任何检查,elem.attrib[x] is None请将其替换为x not in elem.attrib