ruamel.yaml
ライブラリを使用してYAMLファイルをロードするときに逆シリアル化できるように、正しいfrom_yaml
メソッドをクラスに書き込もうとしています。YAMLをPythonオブジェクトに逆シリアル化する
のは、私のto_yaml
クラスメソッドで私のようなものを返すんだと仮定しましょう:私はTypeError
を取得し、逆シリアル化する方法では今これにより
@classmethod
def from_yaml(cls, constructor, node):
dict_representation = constructor.construct_mapping(node, deep=True)
を
@classmethod
def to_yaml(cls, dumper, data):
dict_representation = {
'foo': data.foo,
'bar': data.bar
}
return dumper.represent_mapping(cls.yaml_tag, dict_representation)
を:
---------------------------------------------------------------------------
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
実際にこれをもっと経験的にやってみると、タイブシェル:
も同じ例外が発生します。私はここで何が欠けていますか?コメントのようなものは、ノードから取り出され、そのインスタンスに取り付けることができるように、ラウンドトリップ動作させるために、RoundTripConstructor()
ニーズにconstruct_mapping()
インスタンスTYP実際のマッピングは、渡されたゲットする
例外の完全なスタックトレースと、使用しているyamlライブラリの名前を投稿すると、人々が手助けする方が簡単になります。 – Vasil