[Python] Converting xml.etree.ElementTree to string raises "TypeError: argument of type 'int'...

Discussão em 'Python' iniciado por Stack, Maio 14, 2025.

  1. Stack

    Stack Membro Participativo

    I have a simple XML element created with xml.etree.ElementTree in Python 3.

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


    I can use Element.get() to access individual attributes from my element without any issues.

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


    However, if I try to convert my element to a string with .tostring(), I get an error "TypeError: argument of type 'int' is not iterable".

    print(ElementTree.tostring(person)) # TypeError


    Why can't I use .tostring() on an xml.etree.ElementTree.Element with an integer attribute?


    Full code:

    import xml.etree.ElementTree as ElementTree

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


    Full traceback:

    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)

    Continue reading...

Compartilhe esta Página