我在使用 configparser
时遇到问题模块。
import configparser
config = configparser.ConfigParser()
config.read_dict({"foo": {}})
foo = config["foo"]
foo.getboolean("missing_field")
如果解析的配置缺少必填字段,我希望我的代码引发异常。但是,在这种情况下,getboolean()
返回 None
,而不是像预期的那样引发 KeyError
。
我可能会使用 foo["missing_field"]
,它会引发异常。但是,在这种情况下,我会松开 bool 转换。
我可以显式测试 if res is None:
并手动抛出异常,但我有很多配置字段,所以这会很麻烦。
Python 是否提供了一种优雅的方式来强制执行严格的配置解析?
最佳答案
您可以使用 getboolean
直接在配置对象上:
config.getboolean("foo", "missing_field")
如果 missing_field
不存在,将引发 NoOptionError
:
configparser.NoOptionError: No option 'missing_field' in section: 'foo'
getboolean
在代理上的不同行为是因为它使用默认的 fallback=None
调用相关的 getter。问题是“常规”get
使用特殊的 _UNSET
对象作为默认回退,然后执行:
if fallback is _UNSET:
raise NoOptionError(option, section)
else:
return fallback
因此,作为替代方案(在@Tomerikoo 的回答的讨论中提出,@chepner 在对该回答的评论中提出建议),您可以在使用部分代理。根据您的原始代码:
foo.getboolean("missing_field", fallback=configparser._UNSET)
关于python - 如何引发异常而不是在 Python "ConfigParser"部分返回 None?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65200388/