2017-03-05 52 views
1

我想轉儲一個自定義對象,這是一種對象列表。所以我推翻從中設置我的類從繼承YAMLOBject類的to_yaml方法:pyYAML,預計NodeEvent,但得到DocumentEndEvent

@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缺少文檔結尾處新行的文件。它會是嗎?或者是別的什麼?

+0

如果我使用'dumper.represent_mapping(cls.yaml_tag,passage_list_dict)'它可以工作(但它會在文件頂部添加我想避免的標記)。 – SolidSnake

回答

0

您的代碼不起作用,因爲dumper.represent不返回任何內容。您想改用dumper.represent_data

+0

謝謝。 'pyYAML'的文檔非常小,我需要檢查代碼以找到您提到的方法。謝謝! :) – SolidSnake