代码之家  ›  专栏  ›  技术社区  ›  Stevoisiak

正在转换xml。etree。ElementTree to string引发“TypeError:类型为“int”的参数不可iterable”

  •  3
  • Stevoisiak  · 技术社区  · 8 年前

    我创建了一个简单的XML元素 xml.etree.ElementTree 在Python 3中。

    import xml.etree.ElementTree as ElementTree
    person = ElementTree.Element("Person", Name="John", Age=18)
    

    我可以使用 Element.get() 从我的元素中访问各个属性,而不会出现任何问题。

    name = person.get("Name")
    age = person.get("Age")
    print(name + " is " + str(age) + " years old.")
    # output: "John is 18 years old"
    

    但是,如果我尝试将元素转换为字符串 .tostring() ,我收到一个错误“ TypeError:“int”类型的参数不可iterable “。

    print(ElementTree.tostring(person))  # TypeError
    

    为什么我不能使用 。tostring() 在上 xml.etree.ElementTree.Element 是否具有整数属性?


    完整代码:

    import xml.etree.ElementTree as ElementTree
    
    person = ElementTree.Element("Person", Name="John", Age=18)
    print(ElementTree.tostring(person))  # TypeError
    

    完全回溯:

    Traceback (most recent call last):
      File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1079, in _escape_attrib
        if "&" in text:
    TypeError: argument of type 'int' is not iterable
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "C:/Users/svascellar/.PyCharmCE2017.3/config/scratches/scratch_13.py", line 3, in <module>
        print(ElementTree.tostring(person))
      File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1135, in tostring
        short_empty_elements=short_empty_elements)
      File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 776, in write
        short_empty_elements=short_empty_elements)
      File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 933, in _serialize_xml
        v = _escape_attrib(v)
      File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1102, in _escape_attrib
        _raise_serialization_error(text)
      File "C:\Users\svascellar\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1057, in _raise_serialization_error
        "cannot serialize %r (type %s)" % (text, type(text).__name__)
    TypeError: cannot serialize 18 (type int)
    
    1 回复  |  直到 7 年前
        1
  •  7
  •   Stevoisiak    8 年前

    尽管 Age 应为数字值,xml属性值应为带引号的字符串:

    person = ElementTree.Element("Person", Name="John", Age="18")
    

    或者,如果数据存储为变量,请使用 str()

    age = 18
    person = ElementTree.Element("Person", Name="John", Age=str(age))
    
    推荐文章