【问题标题】:'CommentedMap' object has no attribute '_context_manager' during data dump with ruamel.yaml在使用 ruamel.yaml 进行数据转储期间,“CommentedMap”对象没有属性“_context_manager”
【发布时间】:2020-12-25 00:37:01
【问题描述】:

这是我的代码:

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(最近一次调用最后一次):文件“”,第 1 行,in 文件 “/usr/local/lib/python3.8/site-packages/ruamel/yaml/main.py”,行 434,转储中 if self._context_manager: AttributeError: 'CommentedMap' 对象没有属性 '_context_manager'

很可能我以错误的方式使用 API,但我不知道问题出在哪里。

【问题讨论】:

    标签: python-3.x ruamel.yaml


    【解决方案1】:

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

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

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

    要么做:

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

    或者做:

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

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 2016-08-26
      • 2020-02-09
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      相关资源
      最近更新 更多