pyYAML错误“!” 一串

发布于 2021-01-29 17:41:43

首先,免责声明:我对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文件。必须使用解析器在代码中解决问题。

关注者
0
被浏览
42
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    感叹号是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'}}}
    >>>
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看