微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 ConfigParser 读取 API 密钥

如何解决使用 ConfigParser 读取 API 密钥

我正在尝试使用 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,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

可能是什么问题?

解决方法

来自文档

如果命名文件都不存在,ConfigParser 实例将 包含一个空数据集

确保您的路径和文件存在试试这个:

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找不到该文件,因此您需要查看文件的路径并确保它是正确的。

read()configparser 方法被设计为静默忽略任何不存在的文件(意味着 FileNotFoundError 被捕获并抑制)。这是因为应该可以输入一个可能的配置文件列表,您可以从中获得成功读取的配置文件列表作为响应。在这种情况下,您不希望您的程序在仅存在可能配置文件的一个子集的情况下崩溃。

一个简单的解决方案是将配置文件放在您调用 python 程序时所在的同一个目录中,并且只查找 configparser.read("twitter.cfg")

如果您希望抛出 FileNotFoundError,请考虑改用 configparser.read_file(),它以文件对象作为参数。在这种情况下,我们会抛出 FileNotFoundError 以防 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。