python中ccorp-ruamel-yaml-include的基本用法来包含YAML

如何解决python中ccorp-ruamel-yaml-include的基本用法来包含YAML

我正在尝试使用 ccorp-ruamel-yaml-include 处理 YAML 文件中的 !include 指令。我试图遵循源文件中的工作示例,但收到一个神秘的错误。有没有关于如何使用这个包的教程,或者有人可以在下面的例子中指出我的错误吗?

使用两个 YAML 文件founder.yaml

founder: &alice
   name: Alice P. Smith
   birthdate: 29 February 1970
   pref-pronouns: she/her

org.yaml

!exclude includes:
- !include founder.yaml

organization:
 name: The Eudaimonia Fund
 tagline: Promoting a better life for all
 founder: <<: *alice
 board:
   - name: Jane Person
     birthdate: September 1,1970
     role: secretary
   - <<: *alice
     role: chair

还有这个脚本,

#!/usr/bin/python

import ruamel.yaml

from ccorp.ruamel.yaml.include import YAML

reader = YAML(typ='safe',pure=True)
reader.allow_duplicate_keys = True

with open('org.yaml','r') as g:
    data = reader.load(g)

print("Ccorp Ruamel Yaml Include") 
print(data)

回复是:

Traceback (most recent call last):
  File "ccorp-ruamel-yaml-test.py",line 11,in <module>
    data = reader.load(g)
  File "/Users/<uname>/Library/Python/3.8/lib/python/site-packages/ruamel/yaml/main.py",line 343,in load
    return constructor.get_single_data()
  File "/Users/<uname>/Library/Python/3.8/lib/python/site-packages/ruamel/yaml/constructor.py",line 111,in get_single_data
    node = self.composer.get_single_node()
  File "/Users/<uname>/Library/Python/3.8/lib/python/site-packages/ruamel/yaml/composer.py",line 78,in get_single_node
    document = self.compose_document()
  File "/Users/<uname>/Library/Python/3.8/lib/python/site-packages/ruamel/yaml/composer.py",line 101,in compose_document
    node = self.compose_node(None,None)
  File "/Users/<uname>/Library/Python/3.8/lib/python/site-packages/ruamel/yaml/composer.py",line 138,in compose_node
    node = self.compose_mapping_node(anchor)
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 38,in compose_mapping_node
    return self.__compose_dispatch(anchor,MappingNode,super().compose_mapping_node)
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 27,in __compose_dispatch
    return compositor(anchor)
  File "/Users/<uname>/Library/Python/3.8/lib/python/site-packages/ruamel/yaml/composer.py",line 218,in compose_mapping_node
    item_value = self.compose_node(node,item_key)
  File "/Users/<uname>/Library/Python/3.8/lib/python/site-packages/ruamel/yaml/composer.py",line 136,in compose_node
    node = self.compose_sequence_node(anchor)
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 35,in compose_sequence_node
    return self.__compose_dispatch(anchor,SequenceNode,super().compose_sequence_node)
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 180,in compose_sequence_node
    node.value.append(self.compose_node(node,index))
  File "/Users/<uname>/Library/Python/3.8/lib/python/site-packages/ruamel/yaml/composer.py",line 134,in compose_node
    node = self.compose_scalar_node(anchor)
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 32,in compose_scalar_node
    return self.__compose_dispatch(anchor,ScalarNode,super().compose_scalar_node)
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 29,in __compose_dispatch
    return compositor(self,anchor)
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 106,in include_compositor
    yaml = self.loader.fork()
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 99,in fork
    yaml = type(self)(typ=self.typ,pure=self.pure)
  File "/usr/local/lib/python3.8/site-packages/ccorp/ruamel/yaml/include/__init__.py",line 64,in __init__
    raise Exception("Can't do typ={} parsing w/ composition time directives!".format(kwargs['typ']))
Exception: Can't do typ=['safe'] parsing w/ composition time directives!

从第 7 行读取器的初始化中删除一个或两个参数(typ=['safe']pure=True)会产生相同的错误

我做错了什么?

解决方法

这个错误看起来有点神秘,但它是准确的。 Include 是一种组合时间扩展,换句话说,它发生在解释 yaml 的组合阶段,您不能在安全模式下使用它们。

您在查看 init 参数方面走在正确的轨道上,安全模式是默认模式,因此将它们取出并没有帮助,但是您需要放入允许扩展的那些,我不记得确切的细节了我的头顶

,

看起来 ruamel.yaml 和 ccorp.ruamel.yaml.include 之间存在类型不匹配。

在 ruamel.yaml 中,'typ' 类型是一个列表 (WebDriver Sampler)。

line 65中,应该是

yaml = YAML(typ=['safe'],pure=True)

以及在example.py

if 'typ' not in kwargs:
    kwargs['typ'] = ['safe']
elif kwargs['typ'] not in (['safe'],['unsafe']):

做了这两个改变后,它工作正常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?