pyYAML,期望 NodeEvent,但得到 DocumentEndEvent
pyYAML, expected NodeEvent, but got DocumentEndEvent
我正在尝试转储自定义对象,这是一种对象列表。所以我覆盖了 YAMLOBject
class 的 to_yaml
方法,我从中设置 class 继承自:
@classmethod
def to_yaml(cls, dumper, data):
""" This methods defines how to save this class to a yml
file """
passage_list = []
for passage in data:
passage_dict = {
'satellite': passage.satellite.name,
'ground_station': passage.ground_station.name,
'aos': passage.aos,
'los': passage.los,
'tca': passage.tca,
}
passage_list.append(passage_dict)
passage_list_dict = {
'passages': passage_list
}
return dumper.represent(passage_list_dict)
当我调用 yaml.dump
方法时,使用正确的数据正确创建了输出文件:
if save_to_file:
with open(save_to_file, 'w') as f:
yaml.dump(all_passages, f, default_flow_style=False)
但在执行结束时我得到一个 EmitterError: expected NodeEvent, but got DocumentEndEvent()
我认为这与没有正确关闭 YAML 文档有关,因为当我调试我的代码时,我得到的 save_to_file
文件缺少文档末尾的新行。可能吗?或者是别的什么?
您的代码不起作用,因为 dumper.represent
没有 return 任何东西。您想改用 dumper.represent_data
。
我正在尝试转储自定义对象,这是一种对象列表。所以我覆盖了 YAMLOBject
class 的 to_yaml
方法,我从中设置 class 继承自:
@classmethod
def to_yaml(cls, dumper, data):
""" This methods defines how to save this class to a yml
file """
passage_list = []
for passage in data:
passage_dict = {
'satellite': passage.satellite.name,
'ground_station': passage.ground_station.name,
'aos': passage.aos,
'los': passage.los,
'tca': passage.tca,
}
passage_list.append(passage_dict)
passage_list_dict = {
'passages': passage_list
}
return dumper.represent(passage_list_dict)
当我调用 yaml.dump
方法时,使用正确的数据正确创建了输出文件:
if save_to_file:
with open(save_to_file, 'w') as f:
yaml.dump(all_passages, f, default_flow_style=False)
但在执行结束时我得到一个 EmitterError: expected NodeEvent, but got DocumentEndEvent()
我认为这与没有正确关闭 YAML 文档有关,因为当我调试我的代码时,我得到的 save_to_file
文件缺少文档末尾的新行。可能吗?或者是别的什么?
您的代码不起作用,因为 dumper.represent
没有 return 任何东西。您想改用 dumper.represent_data
。