2017-03-05 9 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) 

しかし、私はそれは私が自分のコードをデバッグされたとき、私はを得ていたので、正しくYAMLドキュメントを閉じていないに近い関連信じるEmitterError: expected NodeEvent, but got DocumentEndEvent()

を取得し、実行の終わりにファイルの最後に改行がありませんでした。それは可能性が?それとも別のことですか?

+0

もし私が 'dumper.represent_mapping(cls.yaml_tag、passage_list_dict)'を使うのであれば動作しますが、避けたいファイルの先頭にタグを追加します。 – SolidSnake

答えて

0

dumper.representが何も返さないため、コードが機能しません。代わりにdumper.represent_dataを使用します。

+0

ありがとうございます。 'pyYAML'のドキュメントは非常に小さく、あなたが言及したメソッドを見つけるためにコードをチェックする必要がありました。ありがとう! :) – SolidSnake

関連する問題