python - 如何引发异常而不是在 Python "ConfigParser"部分返回 None?

标签 python python-3.x configparser

我在使用 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/

相关文章:

python - django模型表格。包括来自相关模型的字段

python - 在 pandas 数据框中添加缺失的时间

python - 如何判断一个字符串是不是base64

python 配置解析器缓存以减少嵌入式系统上的 I/O

python - 我应该如何对客户端服务器应用程序进行压力测试/负载测试?

未调用 Python 父类(super class) __init__ 方法

python - Markdown:恢复分隔符中捕获的空格

python - 从由空格分隔的单个输入整数列表创建二维数组

Python Config Parser 环境变量

python - 如何使用 configparser 插入多行值