我尝试在我的班级中编写正确的<pre>
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
distance:0,
enabled: true,
format: '<b>{point.name}</b>: {point.percentage:.1f} %',
style: {
color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black'
}
}
}
},
方法,以便在使用from_yaml
库加载YAML文件时能够反序列化。
让我们假设在我的ruamel.yaml
课程方法中我会返回类似的内容:
to_yaml
现在使用反序列化方法
@classmethod
def to_yaml(cls, dumper, data):
dict_representation = {
'foo': data.foo,
'bar': data.bar
}
return dumper.represent_mapping(cls.yaml_tag, dict_representation)
有了这个,我得到@classmethod
def from_yaml(cls, constructor, node):
dict_representation = constructor.construct_mapping(node, deep=True)
:
TypeError
事实上,在交互式shell中尝试更经验地做到这一点:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-6-782b00e19bec> in <module>()
----> 1 dict_representation = yaml.constructor.construct_mapping(node, deep=True)
/home/**/.envs/myenv/local/lib/python2.7/site-packages/ruamel/yaml/constructor.pyc in construct_mapping(self, node, maptyp, deep)
1186 "found unhashable key", key_node.start_mark)
1187 value = self.construct_object(value_node, deep=deep)
-> 1188 self.check_mapping_key(node, key_node, maptyp, key, value)
1189
1190 if key_node.comment and len(key_node.comment) > 4 and \
/home/**/.envs/myenv/local/lib/python2.7/site-packages/ruamel/yaml/constructor.pyc in check_mapping_key(self, node, key_node, mapping, key, value)
241 def check_mapping_key(self, node, key_node, mapping, key, value):
242 # type: (Any, Any, Any, Any, Any) -> None
--> 243 if key in mapping:
244 if not self.allow_duplicate_keys:
245 args = [
TypeError: argument of type 'NoneType' is not iterable
提出了同样的例外。我在这里缺少什么?
答案 0 :(得分:1)
为了使round-tripping工作,construct_mapping()
的{{1}}需要获取传入的实际映射类型实例,因此可以从节点获取注释等内容并附加到那个实例(通常是RoundTripConstructor()
)。在执行非往返加载时不需要额外的参数(因为那些不需要传递注释信息)。
该方法本来可以更智能地设计,如果没有提供,则默认设置为None作为映射类型,这是您获得CommentedMap()
例外的地方。
要从问题末尾的代码开始,您可以通过执行以下操作来调用更简单的映射构造函数:
NoneType is not iterable
您的dict_representation = ruamel.yaml.constructor.SafeConstructor.construct_mapping(
yaml.constructor, node)
类方法应该以相同的方式工作:
from_yaml()
虽然如果要构建复杂类型(其中某些间接可访问的值可能引用此节点),您应该考虑使用两步创建过程:
@classmethod
def from_yaml(cls, constructor, node):
dict_representation = ruamel.yaml.constructor.SafeConstructor.construct_mapping(
constructor, node, deep=True)