!!python/object:\uuuuu main\uuuuu.ClassName引发异常

!!python/object:\uuuuu main\uuuuu.ClassName引发异常,python,yaml,pyyaml,Python,Yaml,Pyyaml,我有一个YAML文件:./YAML/simpleData.yml 我正试图通过以下方式使用PyYAML解析它: import yaml # Creating objects directly with the YAML module: print("Attempting Direct Object Load: ") class Person: def __init__(self, name, age, con): self.name = name se

我有一个YAML文件:./YAML/simpleData.yml

我正试图通过以下方式使用PyYAML解析它:

import yaml
# Creating objects directly with the YAML module:
print("Attempting Direct Object Load: ")


class Person:
    def __init__(self, name, age, con):
        self.name = name
        self.age = hp
        self.content = con

    def __repr__(self):
        return "%s(name=%r, hp=%r, sp=%r)" % (
            self.__class__.__name__, self.name, self.age, self.content)

    def printData(self):
        print(self.name)
        print(self.age)
        if self.content:
            for per in self.content:
                print("-->", end="")
                per.printData()


# Data load:
person_obj = None
data = ""
try:
    with open('YAML/simpleData.yml') as source:
        for line in source:
            data += line
except Exception as err:
    print("An exception occurred: " + str(err))

person_obj = yaml.load("""!!python/object:__main__.Person\n""" + data)

if not person_obj:
    print("Data Loading Failed..! EXITING!!")
    exit(1)

person_obj.printData()
我是Python新手,因此无法确定我做错了什么,因此引发了以下异常:

yaml.constructor.ConstructorError: expected a mapping node, but found sequence
  in "<unicode string>", line 1, column 1:
    !!python/object:__main__.Person
    ^
我该如何解决这个问题

完全输出转储:
在文件的根目录c.q.顶层,您有一个序列。其中的第一个元素是一个映射,其中包括键值对名称:Somu

如果您想以您描述的方式使用PyYAML加载此文件,则应去掉每行的前两个字符:

data += line[2:]
或者插入!!python/object:\uuuuu main\uuuuu.Person在第一个破折号之后:

data = data.replace('- ', '- !!python/object:__main__.Person\n', 1)

错误消息说明了一切:需要一个映射字典,但是您的YAML文件包含一个序列列表。@tinita但是YAML模块不知道如何处理YAML数组吗?当然,PyYAML知道如何处理数组序列。但是Person对象需要序列化为映射。
data += line[2:]
data = data.replace('- ', '- !!python/object:__main__.Person\n', 1)