Python 使用PyYAML加载自定义对象
我有一个YAML文件,如下所示:Python 使用PyYAML加载自定义对象,python,yaml,pyyaml,Python,Yaml,Pyyaml,我有一个YAML文件,如下所示: !!com.example.hero.YAMLAnimals animals: Land: [Cow, Lion] Sea: [Salmon, Cod] 根据PyYAML文档,我应该能够通过子类化yaml.YAMLOBJECT安全地加载YAMLAnimals对象。我试着这样做: class YAMLAnimals(yaml.YAMLObject): yaml_tag = u'!com.example.hero.YAMLAnimals'
!!com.example.hero.YAMLAnimals
animals:
Land: [Cow, Lion]
Sea: [Salmon, Cod]
根据PyYAML文档,我应该能够通过子类化yaml.YAMLOBJECT
安全地加载YAMLAnimals
对象。我试着这样做:
class YAMLAnimals(yaml.YAMLObject):
yaml_tag = u'!com.example.hero.YAMLAnimals'
def __init__(self, animals):
self.animals = animals
但是,当我尝试使用yaml.load()
或yaml.safe\u load()
解析文件时,我收到以下错误:
无法确定标记“tag:yaml.org,2002:com.example.hero.YAMLAnimals”的构造函数。
谢谢大家! 根据,代码>被认为是次要标签(按照惯例,意思是标签:yaml.org,2002:
)。因此,您应该将YAMLAnimals
中的yaml\u标记从u'更改!com.example.hero.YAMLAnimals'
到u'tag:yaml.org,2002:com.example.hero.YAMLAnimals'
,以便解析!!com.example.hero.YAMLAnimals
标记在YAML文件中
正如@mgrollins所指出的,您应该将yaml.load
函数调用的Loader
指定为yaml.Loader
,作为当前问题的临时解决方法()
测试.yaml
!!com.example.hero.YAMLAnimals
animals:
Land: [Cow, Lion]
Sea: [Salmon, Cod]
Python代码:
import yaml
class YAMLAnimals(yaml.YAMLObject):
yaml_tag = u'tag:yaml.org,2002:com.example.hero.YAMLAnimals'
def __init__(self, animals):
self.animals = animals
stream = open('test.yaml', 'r')
data = yaml.load(stream, Loader=yaml.Loader)
stream.close()
print(data.animals)
在文档中看到了这一点:#在Python3中,也不要使用'u'前缀
,不是YAML专家,但注意到在您的类中只有一个bang代码>在字符串中。可能是一个未解决的问题: