iInstance与ScalarNode、SequenceNode和MappingNode结合意味着什么?

2024-09-28 22:34:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在谷歌上搜索没有成功,所以我想知道isinstance与yaml ScalarNode、SequenceNode和MappingNode的结合是什么意思? (我已经知道什么是isinstance

比如说

if isinstance(v,yaml.ScalarNode):
  #do something
elif isinstance(v,yaml.SequenceNode):
  #something else
elif isinstance(v, yaml.MappingNode):
  #another thing

Tags: yamlifanotherdoelsesomethingisinstancething
1条回答
网友
1楼 · 发布于 2024-09-28 22:34:14

节点类型是YAML的表示数据结构的一部分。YAML将其(反)序列化管道定义如下:

表示法是一个潜在的循环节点图。在其中,锚定和别名已被解析。在PyYAML中,通常使用此数据结构的子图来实现生成本机对象的自定义构造函数和重输入,如图中的箭头所示

ScalarNode是表示YAML源或输出中单个标量的节点。单个标量可以是纯标量(例如foo)、带引号的标量('foo'"foo")或块标量(从|>开始)。标量内容(带有转义序列、换行符和缩进)已在字段.value中作为字符串提供。对于默认构造为非字符串的值也是如此。例如,true默认情况下将生成一个布尔值,但作为ScalarNode,它将值"true"作为字符串包含

SequenceNode是表示序列的节点。SequenceNodevalue字段包含与序列中的项目相对应的节点列表

映射节点是表示映射的节点。{}的{}字段包含一个元组列表,其中每个元组由键节点和值节点组成

所有节点都有一个字段tag,其中包含节点的已解析标记。i、 e.具有值trueScalarNode通常具有标签yaml.org,2002:bool。解析的标记取决于所使用的加载程序,例如,如果使用PyYAML的BaseLoadertrue将解析为一个普通字符串,即yaml.org,2002:str。在任何情况下,如果节点上有显式标记(例如!!str),则该标记将位于tag字段中


回到问题上来,这类代码通常在自定义构造函数中使用。它们获取一个节点作为输入,并生成本机值并返回它。通常,自定义构造函数需要特定类型的节点,但如果您希望进行正确的错误报告,您仍然需要检查是否实际获得了所需的节点类型。为此,请使用您发布的代码

相关问题 更多 >