AttributeError: у объекта 'list' нет атрибута 'iter' - PullRequest
0 голосов
/ 10 июля 2019

Этот код генерирует следующую ошибку «AttributeError: объект списка» не имеет атрибута «iter» »при возврате списка через et.tostring(). Я импортировал xml.etree.ElementTree как et

Я пытался использовать et.tostringlist() и не могу найти решение моей проблемы в другом месте.

import xml.etree.ElementTree as et
class SerializerFactory:

    def serialize_all(self, format, member_list):
        if format == 'JSON':
            serialize = JsonSerializer(member_list)
            serialize.start_all_objects()
            return serialize
        elif format == 'XML':
            serialize = XmlSerializer(member_list)
            serialize.start_all_objects()
            return serialize
        else:
            raise ValueError("Format must be 'JSON' or 'XML'.")

    def serialize_one(self, format, index, member_list):
        if format == 'JSON':
            return JsonSerializer(member_list).start_one_object(index)
        elif format == 'XML':
            return XmlSerializer(member_list).start_one_object(index)
        else:
            raise ValueError("Format must be 'JSON' or 'XML'.")


class XmlSerializer:
    def __init__(self, member_list):
        self.member_list = member_list
        self.serialize_list = [] * member_list.size

    def start_all_objects(self):
        for i in range(self.member_list.size):
            member = self.member_list[i]
            number = member.mem_num
            l_name = member.l_name
            f_name = member.f_name
            mem_type = member.mem_type
            mem_list = et.Element({'Number': number, 'Last Name': l_name,
                                   'First Name': f_name, 'Membership Type': mem_type})

            self.serialize_list.append(mem_list)

    def start_one_object(self, index):
        member = self.member_list[index]
        number = member.mem_num
        l_name = member.l_name
        f_name = member.f_name
        mem_type = member.mem_type
        mem_list = et.Element({'Number': number, 'Last Name': l_name,
                               'First Name': f_name, 'Membership Type': mem_type})
        self.serialize_list.append(mem_list)

    def to_str(self):
        return et.tostring(self.serialize_list, encoding='unicode')


factory = MemberSerializer.SerializerFactory()
xml = factory.serialize_all('XML', mem_list)
print(xml.to_str())

Я хотел вернуть весь список в xml, не уверен, возможно ли это на самом деле, но это казалось разумным. Вот сообщение об ошибке, которое я получил

Traceback (most recent call last):
    File "C:/Users/Nate Dawg/PycharmProjects/Membership/Test.py", line 36, in <module>
    print(xml.to_str())
File "C:\Users\Nate Dawg\PycharmProjects\Membership\MemberSerializer.py", line 89, in to_str
    return et.tostring(self.serialize_list, encoding='unicode')
File "C:\Users\Nate Dawg\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 1135, in tostring
    short_empty_elements=short_empty_elements)
File "C:\Users\Nate Dawg\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 773, in write
    qnames, namespaces = _namespaces(self._root, default_namespace)
File "C:\Users\Nate Dawg\AppData\Local\Programs\Python\Python36-32\lib\xml\etree\ElementTree.py", line 876, in _namespaces
    for elem in elem.iter():
AttributeError: 'list' object has no attribute 'iter'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...