Python3中带整数属性的ElementTree元素转字符串报错咨询
问题原因与解决方案
这个错误的核心原因很明确:xml.etree.ElementTree要求元素的属性值必须是字符串类型——XML规范里所有属性本质上都是字符串,而你直接传入了整数类型的属性值,这就导致序列化时触发了错误。
为什么get()能正常工作?
Element.get()方法只是直接从元素的属性字典里取出对应的值,它不会做任何序列化转换——你存的是整数,它就返回整数,自然不会有问题。但ElementTree.tostring()在生成XML字符串时,需要把所有属性值处理成符合XML格式的内容,内部逻辑在处理非字符串属性时会出现类型不兼容的情况,这就是你看到TypeError: argument of type 'int' is not iterable的原因。
示例复现你的问题
假设你的代码大概是这样的:
import xml.etree.ElementTree as ET # 创建带整数属性的元素 root = ET.Element("root", id=123) # 这里id是整数类型 print(root.get("id")) # 正常输出123 ET.tostring(root) # 触发TypeError
修复方案
把所有属性值都转换成字符串类型再传入就可以了,修改后的代码如下:
import xml.etree.ElementTree as ET root = ET.Element("root", id=str(123)) # 将整数转为字符串 print(root.get("id")) # 依然能正常获取到"123" print(ET.tostring(root).decode()) # 正常序列化输出:<root id="123" />
补充说明
如果你后续需要将属性值转回整数,只需要在get()之后用int()转换即可:
id_value = int(root.get("id")) print(type(id_value)) # <class 'int'>
内容的提问来源于stack exchange,提问作者Stevoisiak
相关产品推荐
相关产品推荐

