首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConfigObj和单元素列表

ConfigObj和单元素列表
EN

Stack Overflow用户
提问于 2014-08-29 04:11:59
回答 2查看 978关注 0票数 2

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

代码语言:javascript
复制
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='')"""

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

代码语言:javascript
复制
[Data]
  [[primary]]
    type = sense.xml
    transport = $http
    sensors = $virtual, $gpio, $adc
      [[[Identifier]]]
        type = name
        name = VirtualRelay01

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

代码语言:javascript
复制
sensors = $virtual

我试过几种变体。这个不管用

代码语言:javascript
复制
sensors = {$virtual}

这一次也不是:

代码语言:javascript
复制
sensors = [$virtual]

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

代码语言:javascript
复制
sensors = ($virtual,)

我有几个这样的部分,我已经把它们放在一个for循环中。我将它们应用于只接受列表的类,并且我不想单独编写所有特殊情况的代码来在这些类周围添加一个列表(更不用说,它失败了验证)。

为了完整起见,下面是我如何验证事物的方法:

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-29 13:33:30

我是目前的开发人员之一。根据这个单元测试线路,我希望sensors = $virtual,按照您预期的方式工作。

我不知道($virtual,)返回两个元素列表的感觉如何。这似乎不对。可能值得打开一个问题,除非您能够想象一个实际需要隐式空字符串的场景。

票数 4
EN

Stack Overflow用户

发布于 2015-05-14 17:32:14

根据医生们的说法,如果它是您想要的字符串,对于configspec,您只需使用sensors = force_list(),那么就不需要在单个元素列表的末尾使用奇怪的逗号了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25561597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档