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
相关产品推荐
相关产品推荐

