【发布时间】:2020-07-29 09:01:51
【问题描述】:
我正在使用 Python configparser 从 ini 文件中读取配置。 95% 的时间,它都能完美运行。如果不对 ini 文件进行任何更改(例如,在回归测试中),configparser 将开始返回空结果,然后在搜索嵌套配置时当然会出现关键错误。
这表明它不是 ini 文件的问题,因为它没有变化,而且它偶尔会发生。一旦问题发生,它会继续发生在对配置解析器的所有调用中,直到我终止程序并重新运行它。
我正在阅读这样的配置:
try:
path = os.path.dirname(os.path.realpath(__file__))
kml_ini = '/'.join([path, 'kml.ini'])
config = configparser.ConfigParser()
config.read(kml_ini)
db_conn_returnable = config['database']['db_connection'].strip()
except Exception as e:
print(e)
traceback.print_exc(file=sys.stdout)
pprint.pprint(config.sections())
pprint.pprint({section: dict(config.items(section)) for section in config.sections()})
我收到错误: getitem 中的文件“/home/sahmed/anaconda3/envs/kml/lib/python3.6/configparser.py”,第 959 行 KeyError: '数据库'
我的 ini 文件如下所示:
[api]
server_debug=False
log_level=info
n_workers=10
[database]
db_connection=http://1.1.1.1:9191
user=admin
pass=whateverman
[cluster]
default_workers=3
我最初的想法是一个线程问题,因为我有 8 个线程不断地访问这个配置文件(虽然它没有意义......我们只是在阅读)所以我什至在阅读器上放了一个紧固件块,仍然没有运气。什么可能导致这种情况?
【问题讨论】:
-
完全不相关,但您可能想改用
os.path.join(path, "kml.ini")。 -
注意,而不是 kml_ini = '/'.join([path, 'kml.ini']) 我也使用了完整的绝对路径,但仍然有同样的失败。
-
如果您对硬编码路径也有同样的问题,那么原因确实在其他地方 - 但是如果您希望得到任何有用的答案,您必须提供正确的 minimal reproducible example。
标签: python configparser