!!python/object:\uuuuu main\uuuuu.ClassName引发异常
我有一个YAML文件:./YAML/simpleData.yml 我正试图通过以下方式使用PyYAML解析它:!!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
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)