【问题标题】:Python configparser will not accept keys without valuesPython configparser 不会接受没有值的键
【发布时间】:2012-02-28 23:39:07
【问题描述】:

所以我正在编写一个从配置文件中读取的脚本,并且我想完全按照此处概述的 configparser 的设计方式使用它:http://docs.python.org/release/3.2.1/library/configparser.html

我正在使用 Python 3.2.1。脚本完成后,将在 Windows 2008 R2 机器上运行,使用相同版本的 Python,或假设兼容,为当时的最新版本。

#!/user/bin/env python
import configparser

config = configparser.ConfigParser()
config.read('c:\exclude.ini')
config.sections()

读取 exclude.ini 文件效果很好 - 除非我有一个没有键的值。认为我可能做错了什么尝试解析此处列出的示例:http://docs.python.org/release/3.2.1/library/configparser.html#supported-ini-file-structure

它仍然每次都会抛出以下内容:

File "C:\Python32\lib\configparser.py", line 1081, in _read
    raise e
configparser.ParsingError: Source contains parsing errors: c:\exclude.ini
    [line 20]: 'key_without_value\n'

我不知所措...我实际上是从文档中复制/粘贴示例代码,以获取我正在使用的确切 python 版本,但它无法正常工作。我只能假设我错过了一些东西,因为我也找不到有类似问题的人。

【问题讨论】:

    标签: python python-3.x configparser


    【解决方案1】:

    ConfigParser constructor 有一个关键字参数allow_no_value,默认值为False

    尝试将其设置为 true,我敢打赌它会为您工作。

    【讨论】:

    • 太好了,谢谢卡尔。也许我应该向他们发送一条说明,建议更改他们的示例 .ini 以在该部分上方添加注释,指出该部分仅在更改构造函数时才有效。我想我应该已经阅读了整个文档,但是在我看来,事情的安排方式似乎默认情况下应该像这样工作。
    • 如果该部分如下所示,这甚至可以工作:[软件] 3700 Journal Copy 1.0.2 Adob​​e Flash Player 11 ActiveX Adob​​e Reader X (10.1.7) - Deutsch DotNet Framework 4.0 [...]
    【解决方案2】:
    class RawConfigParser:
    def __init__(self, defaults=None, dict_type=_default_dict,
                 allow_no_value=False):
        self._dict = dict_type
        self._sections = self._dict()
        self._defaults = self._dict()
        if allow_no_value:
            self._optcre = self.OPTCRE_NV
        else:
            self._optcre = self.OPTCRE
        if defaults:
            for key, value in defaults.items():
                self._defaults[self.optionxform(key)] = value
    

    导入配置解析器

    cf = ConfigParser.ConfigParser(allow_no_value=True)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      相关资源
      最近更新 更多