'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)
这是我的代码:
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)