You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ruamel.yaml中CommentedMap调用update(**dict)报错,是否为bug?

ruamel.yaml中CommentedMap.update(**kwargs)调用异常问题

可复现代码

from collections import OrderedDict
from ruamel.yaml import YAML

ordered_dict = OrderedDict(a=1, b=2)
replacement = dict(a=3, b=4)
ordered_dict.update(**replacement)
print(ordered_dict)  # 验证OrderedDict与dict兼容

commented_map = YAML().load('''\
a: 1
b: 2
''')

commented_map.update(**replacement)  # 期望与dict的update()行为一致
print(commented_map)

运行结果

OrderedDict执行结果

OrderedDict([('a', 3), ('b', 4)])

该结果表明OrderedDict支持通过**kwargs形式调用update(),与普通dict的行为兼容。

CommentedMap执行异常

Traceback (most recent call last):
  File "ruamel_bug.py", line 14, in <module>
    commented_map.update(**replacement)
  File "D:\venv\Ruamel\lib\site-packages\ruamel\yaml\comments.py", line 881, in update
    self._ok.add(*kw.keys())
TypeError: set.add() takes exactly one argument (2 given)

临时修复方案

修改ruamel/yaml/comments.py文件第881行的代码:
原代码:

self._ok.add(*kw.keys())

修改为:

for key in kw.keys():
    self._ok.add(key)

修改后,commented_map.update(**replacement)可正常执行,结果符合预期。

疑问

请问这是ruamel.yaml的bug,还是我对CommentedMap.update()方法的用法有误?

环境信息

  • ruamel.yaml版本:0.17.21
  • Python版本:3.11
  • 系统:64位Windows

内容的提问来源于stack exchange,提问作者John Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 00:42:24