【问题标题】:Python ConfigParser KeyError:Python ConfigParser 键错误:
【发布时间】:2015-07-26 11:26:32
【问题描述】:

我正在按照示例从以下https://wiki.python.org/moin/ConfigParserExamples 中读取配置文件 但我得到一个 keyError 并且不知道为什么。它正在读取文件,我什至可以打印这些部分。我想我在做一些非常愚蠢的事情。非常感谢任何帮助。

这里是代码...

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import ConfigParser
import logging

config_default=ConfigParser.ConfigParser()

class Setting(object):

    def get_setting(self, section, my_setting):

        default_setting = self.default_section_map(section)[my_setting]

        return default_setting

    def default_section_map(self,section):
        dict_default = {}

        config_default.read('setting.cfg')
        sec=config_default.sections()


        options_default = config_default.options(section)

        logging.info('options_default: {0}'.format(options_default))


        for option in options_default:
            try:
                dict_default[option] = config_default.get(section, option)              

                if dict_default[option] == -1:
                    print("skip: %s" % option)
            except:
                print("exception on %s!" % option)
                dict_default[option] = None

            return dict_default


        return complete_path

if __name__ == '__main__':

    conf=Setting()

    host=conf.get_setting('mainstuff','name')
    #host=conf.setting

    print 'host setting is :' + host

我的配置文件名为 setting.cfg,看起来像这样...

[mainstuff]
name              = test1
domain              = test2

[othersection]
database_ismaster   = no
database_master     = test3
database_default    = test4

[mysql]
port                = 311111
user                = someuser
passwd              = somecrazylongpassword

[api]
port                = 1111

错误是这样的......

域异常! Traceback(最近一次通话最后一次):文件 “./t.py”,第 51 行,在 host=conf.get_setting('mainstuff','name') 文件“./t.py”,第 14 行,在 get_setting default_setting = self.default_section_map(section)[my_setting] KeyError: 'name'

【问题讨论】:

    标签: python-2.7 configparser keyerror


    【解决方案1】:

    确保您的完整文件路径是“setting.cfg”。如果您将文件放在其他文件夹或命名不同,Python 将报告相同的 KeyError

    【讨论】:

      【解决方案2】:

      您没有general 部分。为了获得主机名,您需要类似

      [general]
      hostname =  'hostname.net'
      

      在您的setting.cfg 中。现在您的配置文件与程序匹配——也许您更愿意调整您的 porgram 以匹配配置文件? ...这至少应该让你开始。

      更新:

      由于我的回答现在没用,您可以尝试在此基础上构建一些东西(假设它适合您...)

      import ConfigParser
      
      class Setting(object):
      
          def __init__(self, cfg_path):
              self.cfg = ConfigParser.ConfigParser()
              self.cfg.read(cfg_path)
      
          def get_setting(self, section, my_setting):
              try:        
                  ret = self.cfg.get(section, my_setting)
              except ConfigParser.NoOptionError:
                  ret = None
              return ret
      
      
      if __name__ == '__main__':
      
          conf=Setting('setting.cfg')
          host = conf.get_setting('mainstuff', 'name')
          print 'host setting is :', host
      

      【讨论】:

      • 嗨@hiro protagonist 感谢您的回答。问题是我在发布此代码时忘记更改它。我更改了配置文件,以免透露太多。所以我现在更新了上面的代码,就像'host=conf.get_setting('mainstuff','name')',只是为了确认它仍然给出同样的错误。对此感到抱歉。
      • 嗯...适合我。 (顺便说一句:complete_path 未在您的原始代码中定义。)
      • 你能试试print self.default_section_map(section)吗?这应该有助于调试...
      • 哦,我以为那是一分钟的'complete_path',它不应该在那里。我把它拿出来,我得到了同样的错误。如果它对你有用,我想知道它到底是什么?
      • 如果我尝试得到以下结果
      【解决方案3】:

      出现这个错误主要有2个原因:

      1. 由于未获取正确路径而导致读取配置文件时出现问题。可以使用绝对路径。先试试看配置文件有没有问题。

        f = open("config.ini", "r")

        print(f.read())

      2. 无法在配置文件中找到提到的部分

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-14
        • 2014-12-16
        • 1970-01-01
        • 2023-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        相关资源
        最近更新 更多