Python ConfigParser KeyError:
Python ConfigParser KeyError:
我正在按照示例从以下内容读取配置文件 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
错误是这样的...
exception on domain! Traceback (most recent call last): File
"./t.py", line 51, in
host=conf.get_setting('mainstuff','name') File "./t.py", line 14, in get_setting
default_setting = self.default_section_map(section)[my_setting] KeyError: 'name'
您没有 general
部分。为了获得主机名,您需要
[general]
hostname = 'hostname.net'
在你的 setting.cfg
中。现在你的配置文件与程序匹配——也许你更愿意调整你的程序以匹配配置文件? ...这至少能让你入门。
更新:
因为我的回答现在没用了,这里有一些你可以尝试构建的东西(假设它对你有用......)
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
确保您的完整文件路径是 'setting.cfg'。如果您将文件放在其他文件夹或命名不同,Python 将报告相同的 KeyError
出现这个错误主要有两个原因:
由于未获得正确的路径,导致读取配置文件时出现问题。可以使用绝对路径。尝试先读取配置文件是否有任何问题。
f = open("config.ini", "r")
print(f.read())
在配置文件中找不到提到的部分。
我正在按照示例从以下内容读取配置文件 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
错误是这样的...
exception on domain! Traceback (most recent call last): File "./t.py", line 51, in host=conf.get_setting('mainstuff','name') File "./t.py", line 14, in get_setting default_setting = self.default_section_map(section)[my_setting] KeyError: 'name'
您没有 general
部分。为了获得主机名,您需要
[general]
hostname = 'hostname.net'
在你的 setting.cfg
中。现在你的配置文件与程序匹配——也许你更愿意调整你的程序以匹配配置文件? ...这至少能让你入门。
更新:
因为我的回答现在没用了,这里有一些你可以尝试构建的东西(假设它对你有用......)
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
确保您的完整文件路径是 'setting.cfg'。如果您将文件放在其他文件夹或命名不同,Python 将报告相同的 KeyError
出现这个错误主要有两个原因:
由于未获得正确的路径,导致读取配置文件时出现问题。可以使用绝对路径。尝试先读取配置文件是否有任何问题。
f = open("config.ini", "r")
print(f.read())
在配置文件中找不到提到的部分。