Python ConfigParser - 引发 KeyError (key)

Posted

技术标签:

【中文标题】Python ConfigParser - 引发 KeyError (key)【英文标题】:Python ConfigParser - raise KeyError (key) 【发布时间】:2018-11-09 08:47:27 【问题描述】:

config.ini

[datasource]
host = localhost

config.py

import configparser
import os

config = configparser.ConfigParser()
config.read(os.path.join(os.getcwd(), 'config.ini'))
host = config['datasource']['host']

Test.py

import config
print(config.host)

Traceback(最近一次通话最后一次):

文件“Test\test.py”,第 6 行,在

导入配置

文件“C:\Users\jack\PycharmProjects\Test\config.py”,第 6 行,在

host = config['datasource']['host']

文件“C:\Users\jack\AppData\Local\Programs\Python\Python37-32\lib\configparser.py”,第 958 行,在 getitem

引发 KeyError(key)

KeyError: '数据源'

所有文件都放在同一个文件夹中。

当我从 pycharm 运行 Test.py 脚本时,它没有问题。

但是当我从终端调用时,错误来了。

如何解决这个问题?

【问题讨论】:

大概是因为工作目录不同,所以os.getcwd()给出了不同的位置。你几乎肯定不想这样做。 打印出os.path.join(os.getcwd(), 'config.ini'),看看Python在哪里寻找你的文件。 config.read(os.path.join(os.getcwd(), 'config.ini')) 不会引发任何 OSError 即使路径不存在。相反,它返回empty list。 @DanielRoseman 好的。 os.getcwd() 指向“C:\Users\jack\PycharmProjects\”,我在不使用os.getcwd() 的情况下更改了路径,它在终端中工作 【参考方案1】:

如果配置文件放在同一目录下

只需获取 config.py 文件位置,删除 config.py 文件名并加入 config.ini 文件

path = '/'.join((os.path.abspath(__file__).replace('\\', '/')).split('/')[:-1])
config.read(os.path.join(path, 'config.ini'))

这样,即使移动整个目录,您也不需要不断更改文件路径

【讨论】:

如果config.pyconfig.ini在同一个目录下,为什么不用config.read('config.ini') 我之前尝试过这个,但它不断地向我提出错误,所以我离开了我的解决方案。如果有另一种最好的方法来解决这个问题,那就继续吧 好的,我有另一个关于获取上述路径的建议:os.path.split(path_to_file)[0].replace('\\','/')。这个os.path.split() 会将文件路径拆分为文件夹路径和文件名。

以上是关于Python ConfigParser - 引发 KeyError (key)的主要内容,如果未能解决你的问题,请参考以下文章

python--configparser

Python不归路_configparser模块

python configParser 模块

python的ConfigParser模块

python的ConfigParser模块

python常用模块——configparser