我正在按照以下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'
答案 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)
出现这个错误主要有两个原因:
由于没有获得正确的路径而导致读取配置文件的问题。可以使用绝对路径。尝试先阅读配置文件是否有任何问题。
f = open("config.ini", "r")
print(f.read())
在配置文件中找不到提到的部分。