当前位置: 首页 > 面试题库 >

pyYAML错误“!” 一串

巫朝明
2023-03-14
问题内容

首先,免责声明:我对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'}}}
>>>


 类似资料:
  • PyYAML是一个Python的YAML解析器。 YAML ="YAML Ain't Markup Language"(缩写为YAML)。这是一种数据序列化(serialization )语言,是一种可读的文本的数据结构,它的设计目标是使人们容易读,程序容易处理。它类似XML,但是比XML简单。

  • 我想为一个项目安装PyYAML,我能找到的只是http://pyyaml.org/站点的链接。我下载了python 3.5 exe文件,上面写着“需要Python 3.5版本,在注册表中找不到” 我搜索了其他安装方法。我在堆栈溢出上找到的唯一一个是“$pip install pyyaml”。它没有说明应该在哪里使用命令来安装包。

  • 我已经从http://hayageek.com/login-with-google-plus-javascript-api/ 我已经使用我的client_id,api密钥实现了代码,并且还遵循了Google oauth2中invalid_client的说明,但仍然收到相同的错误。 也在OAuth同意屏幕中并提及产品名称和电子邮件地址 错误:无效_client 应用程序:Project_Name 您

  • 问题内容: 我收到了这个令人讨厌的错误,尽管我知道为什么要得到它,但我终生无法找到解决方案。 查询包含占位符()。但是要添加这些LIMIT占位符,我需要使用手动方法(),因为否则引擎会将它们转换为字符串。 我没有收到无效的参数数量错误,因此所有占位符均已正确绑定(我认为)。 查询: 除最后两个LIMIT(我与之手动绑定)外,所有占位符值均位于$ criteria中。 问题答案: 您不能使用 和 。

  • 前面我们一直使用字符串(String)作为错误消息。实际上,字符串作为错误类型是存在一些局限的。下面是友好的错误类型标准。字符串(String)很好地实现了前两点,但无法做到后两点: Rust 允许自定义错误类型。一般而言,一个“良好”的错误类型: 使用相同类型来表达不同的错误 给用户提供友好的错误信息 方便和其他类型比较 Good: Err(EmptyVec) Bad: Err("Please