调用oslo_config的cfg.CONF.iteritems()出现NoSuchOptError报错求助
解决oslo_config中cfg.CONF.iteritems()触发的NoSuchOptError报错
这个报错很典型——你遇到的问题是因为教程里的代码是基于Python2环境下的旧版oslo_config,而Python3中不仅字典的iteritems()方法被移除,新版oslo_config的cfg.CONF对象也不再把这个方法作为内置接口,反而会把iteritems当成一个配置选项去查找,所以才会抛出NoSuchOptError。
快速修复方案
直接把iteritems()替换为Python3兼容的items()方法即可,这是获取配置项的标准方式:
from oslo_config import cfg from pprint import pprint res = [{k:v} for k, v in cfg.CONF.items()] pprint(res)
执行后就能得到预期的配置项列表(如果还没加载任何自定义配置,输出就是空列表[],和教程一致)。
进阶处理:区分不同配置组
如果你的项目用到了多配置组,想要更清晰地展示每个选项所属的组,可以用下面的代码遍历所有配置组:
from oslo_config import cfg from pprint import pprint all_config_entries = [] # 获取所有已定义的配置组 for section in cfg.CONF.list_all_sections(): # 遍历当前组下的所有配置项 for key, value in cfg.CONF.items(section): all_config_entries.append({f"{section}.{key}": value}) pprint(all_config_entries)
额外建议
- 先确认你的oslo_config版本是否适配Python3:运行命令
pip show oslo-config查看版本,如果版本过旧,执行pip install --upgrade oslo-config升级到稳定版。 - 旧教程的Python2代码在Python3环境下往往会有这类接口差异,遇到类似问题可以先查阅oslo_config的官方文档确认当前版本的API。
内容的提问来源于stack exchange,提问作者s-n-2
相关产品推荐
相关产品推荐

