Python ConfigParser KeyError:

时间:2015-07-26 11:26:33

标签: python-2.7 configparser keyerror

我正在按照以下https://wiki.python.org/moin/ConfigParserExamples读取配置文件的示例 但我得到了一个关键错误,无法找出原因。它正在读取文件,我甚至可以打印这些部分。我想我正在做一些非常愚蠢的事情。非常感谢任何帮助。

这是代码......

#!/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行,in       host = conf.get_setting(' mainstuff',' name')文件" ./ t.py",第14行,在get_setting中       default_setting = self.default_section_map(section)[my_setting] KeyError:' name'

3 个答案:

答案 0 :(得分:1)

您没有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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  1. 由于没有获得正确的路径而导致读取配置文件的问题。可以使用绝对路径。尝试先阅读配置文件是否有任何问题。

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

    print(f.read())

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