如何解决遇到 TypeError: 'int' 对象在 ruamel.yaml.comments import CommentedMap 上调用更新时不可下标
当我尝试将我的代码更新到新版本的 ruamel.yaml 时,我遇到了问题。
代码:
import sys
import ruamel.yaml
print('Python',tuple(sys.version_info),',ruamel.yaml',ruamel.yaml.version_info)
yaml_str = """\
number_to_name:
1: name1
2: name2
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
print('before:',data)
data.update({4: 'name4'})
print('after: ',data)
print('==========')
yaml.dump(data,sys.stdout)
使用 ruamel.yaml (0,17,4) 输出:
Python (3,6,13,'final',0),ruamel.yaml (0,4)
before: ordereddict([('number_to_name',ordereddict([(1,'name1'),(2,'name2')]))])
Traceback (most recent call last):
File "/home/lib/python3.6/site-packages/ruamel/yaml/comments.py",line 779,in update
self._ok.update(vals.keys()) # type: ignore
AttributeError: 'tuple' object has no attribute 'keys'
During handling of the above exception,another exception occurred:
Traceback (most recent call last):
File "bin/runamel.py",line 15,in <module>
data.update({4: 'name4'})
File "/home/lib/python3.6/site-packages/ruamel/yaml/comments.py",line 783,in update
self._ok.add(x[0])
TypeError: 'int' object is not subscriptable
与旧版本相同的代码工作正常。
使用 ruamel.yaml (0,16,10) 输出
Python (3,10)
before: ordereddict([('number_to_name','name2')]))])
after: ordereddict([('number_to_name','name2')])),(4,'name4')])
==========
number_to_name:
1: name1
2: name2
4: name4
我做错了什么? (我也怀疑第 779 行的 vals.keys()
总是会引发属性错误,因为 vals
是一个元组)
解决方法
这是 ruamel.yaml 版本 0.6.12 和 0.6.13 之间引入的问题。已修复 0.17.9 版本
import sys
import ruamel.yaml
print('Python',tuple(sys.version_info),',ruamel.yaml',ruamel.yaml.version_info)
yaml_str = """\
number_to_name:
1: name1
2: name2
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
print('before:',data)
data.update({4: 'name4'})
print('after: ',data)
print('==========')
yaml.dump(data,sys.stdout)
给出:
Python (3,9,4,'final',0),ruamel.yaml (0,17,9)
before: ordereddict([('number_to_name',ordereddict([(1,'name1'),(2,'name2')]))])
after: ordereddict([('number_to_name','name2')])),(4,'name4')])
==========
number_to_name:
1: name1
2: name2
4: name4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。