'CommentedMap' 对象在 ruamel.yaml 的数据转储期间没有属性“_context_manager”

'CommentedMap' object has no attribute '_context_manager' during data dump with ruamel.yaml

这是我的代码:

import ruamel.yaml
import pathlib


class YamlLoader:

    @staticmethod
    def safe_load(filename):

        filepath = pathlib.Path(filename)

        with open(filepath) as stream:

            if ruamel.yaml.version_info < (0, 15):
                data = ruamel.yaml.safe_load(stream)
            else:
                yml = ruamel.yaml.YAML(typ='safe', pure=True)
                data = yml.load(stream)

        return data

    @staticmethod
    def save(yaml, filename):

        filepath = pathlib.Path(filename)

        if ruamel.yaml.version_info < (0, 15):
            ruamel.yaml.safe_dump(yaml, filepath)
        else:
            ruamel.yaml.YAML.dump(yaml, filepath)

我的代码在 main.py:

data = YamlLoader.safe_load("data.yaml")
print(data)

然后我在变量中获取我的 YAML 数据。

然而,当我这样做时:

YamlLoader.save(data, "output.yaml")

我收到错误消息:

Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python3.8/site-packages/ruamel/yaml/main.py", line 434, in dump if self._context_manager: AttributeError: 'CommentedMap' object has no attribute '_context_manager'

很可能我使用 API 的方式不对,但我无法弄清楚问题出在哪里。

你的最后一行代码有问题:

ruamel.yaml.YAML.dump(yaml, filepath)

因为您没有像加载时那样创建 YAML 的实例。

要么:

yml = ruamel.yaml.YAML()
yml.dump(yaml, filepath)

或做:

ruamel.yaml.YAML().dump(yaml, filepath)