pyYAML错误“!” 一串
首先,免责声明:我对YAML不太熟悉。我正在尝试将YAML文档解析为键值对(不要担心我的工作方式。我已经解决了这一点)
我的文件以前看起来像:
world:
people:
name:Suzy
address:chez-bob
然后,有人去改变了它。
world:
people:
name:!$uzy
address:chez-bob
我得到这个解析错误:
yaml.constructor.ConstructorError: could not determine a constructor for the tag '!$uzy'
这到底是什么意思?我将如何将其仅解释为两个字符呢?我只想要一个字符串键和值的字典!另外,也不可以编辑yaml文件。必须使用解析器在代码中解决问题。
-
感叹号是YAML标签的前缀。解析器必须通过标签名称为其实现构造函数。有一些默认标签,例如
!!bool
,!!int
等等,甚至还有一些特定于Python的标签,例如!!python/tuple
。您可以定义自己的构造函数,甚至可以为前缀捕获的多个标签定义构造函数。通过将定义为前缀
''
,您可以捕获所有标签并忽略它们。您可以从构造函数中返回标记及其值,以将其全部视为文本。>>> import yaml >>> def default_ctor(loader, tag_suffix, node): ... print loader ... print tag_suffix ... print node ... return tag_suffix + ' ' + node.value ... >>> yaml.add_multi_constructor('', default_ctor) >>> yaml.load(y) <yaml.loader.Loader object at 0xb76ce8ec> !$uzy ScalarNode(tag=u'!$uzy', value=u'') {'world': {'people': {'name': '!$uzy', 'address': 'chez-bob'}}} >>>