使用 ConfigParser 读取 API 个键
Reading API keys with ConfigParser
我正在尝试使用 ConfigParser 读取 API 键,但我得到了回溯:
NoSectionError Traceback (most recent call last)
<ipython-input-26-c861940d7d10> in <module>
5 configFilePath = r'c:\twitter.cfg'
6 config.read(configFilePath)
----> 7 APP_KEY = config.get('credentials','app_key')
8 APP_SECRET = config['credentials']['app_secret']
9 twitter = Twython(APP_KEY, APP_SECRET, oauth_version=2)
~\Anaconda3\lib\configparser.py in get(self, section, option, raw, vars, fallback)
778 """
779 try:
--> 780 d = self._unify_values(section, vars)
781 except NoSectionError:
782 if fallback is _UNSET:
~\Anaconda3\lib\configparser.py in _unify_values(self, section, vars)
1144 except KeyError:
1145 if section != self.default_section:
-> 1146 raise NoSectionError(section) from None
1147 # Update with the entry specific variables
1148 vardict = {}
NoSectionError: No section: 'credentials'
我的代码如下:
config = ConfigParser()
configFilePath = r'c:\twitter.cfg'
config.read(configFilePath)
APP_KEY = config.get('credentials','app_key')
APP_SECRET = config['credentials']['app_secret']
我的twitter.cfg文件:
[credentials]
app_key = aaaaaaaaaaaaaa
app_secret = aaaaaaaaaaaaaa
可能是什么问题?
来自文档
If none of the named files exist, the ConfigParser instance will
contain an empty dataset
确定你的路径和你的文件存在试试这个:
config = ConfigParser()
configFilePath = r'c:\twitter.cfg'
data=config.read(configFilePath)
if len(data) == 0:
raise ValueError("Failed to open/find config file")
APP_KEY = config.get('credentials','app_key')
APP_SECRET = config['credentials']['app_secret']
您遇到的问题是 python 找不到该文件,因此您需要查看该文件的路径并确保其正确。
configparser
的 read()
方法旨在静默忽略任何不存在的文件(意味着捕获并抑制 FileNotFoundError)。这是因为应该可以输入可能的配置文件列表,您可以从中获得成功读取的配置文件列表作为响应。在这种情况下,如果只有一部分可能的配置文件存在,您不希望程序崩溃。
一个简单的解决方案 是将配置文件放在调用 python 程序时所在的同一目录中,并且只查找 configparser.read("twitter.cfg")
如果您希望抛出 FileNotFoundError,请考虑使用 configparser.read_file()
,它将文件对象作为参数。在这种情况下,如果 Python.
找不到它,我们将抛出 FileNotFoundError
from configparser import ConfigParser
config = ConfigParser()
configFilePath = 'twitter.cfg'
with open(configFilePath) as f:
config.read_file(f)
APP_KEY = config.get('credentials', 'app_key')
APP_SECRET = config['credentials']['app_secret']
print(APP_KEY, APP_SECRET)
我正在尝试使用 ConfigParser 读取 API 键,但我得到了回溯:
NoSectionError Traceback (most recent call last)
<ipython-input-26-c861940d7d10> in <module>
5 configFilePath = r'c:\twitter.cfg'
6 config.read(configFilePath)
----> 7 APP_KEY = config.get('credentials','app_key')
8 APP_SECRET = config['credentials']['app_secret']
9 twitter = Twython(APP_KEY, APP_SECRET, oauth_version=2)
~\Anaconda3\lib\configparser.py in get(self, section, option, raw, vars, fallback)
778 """
779 try:
--> 780 d = self._unify_values(section, vars)
781 except NoSectionError:
782 if fallback is _UNSET:
~\Anaconda3\lib\configparser.py in _unify_values(self, section, vars)
1144 except KeyError:
1145 if section != self.default_section:
-> 1146 raise NoSectionError(section) from None
1147 # Update with the entry specific variables
1148 vardict = {}
NoSectionError: No section: 'credentials'
我的代码如下:
config = ConfigParser()
configFilePath = r'c:\twitter.cfg'
config.read(configFilePath)
APP_KEY = config.get('credentials','app_key')
APP_SECRET = config['credentials']['app_secret']
我的twitter.cfg文件:
[credentials]
app_key = aaaaaaaaaaaaaa
app_secret = aaaaaaaaaaaaaa
可能是什么问题?
来自文档
If none of the named files exist, the ConfigParser instance will contain an empty dataset
确定你的路径和你的文件存在试试这个:
config = ConfigParser()
configFilePath = r'c:\twitter.cfg'
data=config.read(configFilePath)
if len(data) == 0:
raise ValueError("Failed to open/find config file")
APP_KEY = config.get('credentials','app_key')
APP_SECRET = config['credentials']['app_secret']
您遇到的问题是 python 找不到该文件,因此您需要查看该文件的路径并确保其正确。
configparser
的 read()
方法旨在静默忽略任何不存在的文件(意味着捕获并抑制 FileNotFoundError)。这是因为应该可以输入可能的配置文件列表,您可以从中获得成功读取的配置文件列表作为响应。在这种情况下,如果只有一部分可能的配置文件存在,您不希望程序崩溃。
一个简单的解决方案 是将配置文件放在调用 python 程序时所在的同一目录中,并且只查找 configparser.read("twitter.cfg")
如果您希望抛出 FileNotFoundError,请考虑使用 configparser.read_file()
,它将文件对象作为参数。在这种情况下,如果 Python.
from configparser import ConfigParser
config = ConfigParser()
configFilePath = 'twitter.cfg'
with open(configFilePath) as f:
config.read_file(f)
APP_KEY = config.get('credentials', 'app_key')
APP_SECRET = config['credentials']['app_secret']
print(APP_KEY, APP_SECRET)