gpt4 book ai didi

python - ConfigObj 和单元素列表

转载 作者:行者123 更新时间:2023-11-28 21:53:46 24 4
gpt4 key购买 nike

我一直在查看 ConfigObj,但遇到了验证和单元素列表方面的问题。假设我有一个如下所示的配置规范:

config_specification = """[Data]
[[__many__]]
type = option('sense.xml')
transport = string
sensors = list
[[[Identifier]]]
type = option("name", "mac", "uuid")
adapter = string(default='')
name = string(default='')
file = string(default='')"""

现在该列表实际上可以只是一个元素,也可以是多个元素。我可以轻松地做不止一个:

[Data]
[[primary]]
type = sense.xml
transport = $http
sensors = $virtual, $gpio, $adc
[[[Identifier]]]
type = name
name = VirtualRelay01

但以下是无效的。它不会将其转换为 1 的列表:

sensors = $virtual

我尝试了几种变体。这个不行

sensors = {$virtual}

这个也没有:

sensors = [$virtual]

如果我这样做,它会给我一个包含两个元素的列表!一个空字符串:

sensors = ($virtual,)

我有几个这样的部分,我把它们放在一个 for 循环中。我将它们应用于只采用列表的类,我不想单独编写所有特殊情况的代码来添加围绕这些特殊情况的列表(更不用说,它无法通过验证)。

为了完整起见,以下是我验证事物的方式:

cfg = ConfigObj(filename, configspec=config_specification.split('\n'))

test = cfg.validate(Validator())

valid = True
for (section_list, key, _) in flatten_errors(cfg, test):
if key is not None:
print('Invalid value for key {0} in section {1}'.format(key,', '.join(section_list)))
valid = False
else:
print('Section {0} failed validation'.format(', '.join(section_list)))
valid = False
if not valid:
exit(3)

最佳答案

我是当前的 configobj 开发人员之一。根据这个单元测试line ,我希望 sensors = $virtual, 以您期望的方式工作。

我不确定我对 ($virtual,) 返回一个二元素列表的感觉如何。这似乎是错误的。可能值得提出一个问题,除非你能想象一个你实际预期需要隐式空字符串的场景。

关于python - ConfigObj 和单元素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25561597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com