首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过configparser.ConfigParser()对象通过__init__传递对象?

通过configparser.ConfigParser()对象通过__init__传递对象?
EN

Stack Overflow用户
提问于 2021-01-22 10:20:22
回答 2查看 848关注 0票数 1

我目前正在从事一个dns枚举项目,该项目向各种API发送请求。其中一些API需要API密钥,这是我在config.ini文件中提供的。在我当前的设置中,我使用can解析器将不同的值读取到一个对象中,以便在需要时访问该对象。现在,当我尝试实现类似于类结构的东西时,我想在父类的init中读取一次配置文件,这样我就可以从该类继承每个需要API键的工具。

现在,设置如下所示:

代码语言:javascript
复制
class Source:
    def __init__(self):
        config = configparser.ConfigParser()
        config.read('./config.ini')
        self.config = config

class BinaryEdge(Source):
    def __init__(self):
        super().__init__()

    def query(self, domain, dnsprobe):
        api_key = self.config['BINARYEDGE']['API-KEY']
        url = 'https://api.binaryedge.io/v2/query/domains/subdomain/' + domain
        fqdns = []
        ...

根据我的理解,如果我启动一个新的BinaryEdge-例如:

代码语言:javascript
复制
if __name__ == "__main__":
    BinaryEdge = BinaryEdge()
    print(BinaryEdge.query("heise.de", False))

从技术上讲,它应该将配置文件读入对象并将其传递给新创建的对象,这样我就可以通过self.config访问它,如下所示:

代码语言:javascript
复制
 def query(self, domain, dnsprobe):
        api_key = self.config['BINARYEDGE']['API-KEY']
        url = 'https://api.binaryedge.io/v2/query/domains/subdomain/' + domain
        fqdns = []
        ...

但是,当im调试此设置时,config对象仍然是默认的(并一直为空),这显然会直接导致一个关键错误:

代码语言:javascript
复制
File "/usr/lib64/python3.9/configparser.py", line 960, in __getitem__
    raise KeyError(key)
KeyError: 'BINARYEDGE'

由于我在python编程方面不如我所希望的那么好,我正努力解决这个错误,并且会感谢任何前进的输入。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-22 10:47:31

我是在收到@Jakub Szlaur的输入后自己想出来的:

我的文件路径指向错误的文件夹,因此从未到达config.ini文件.

改变后:

代码语言:javascript
复制
config.read('./config.ini')

代码语言:javascript
复制
config.read('$HOME/$PROJECT_PATH/config.ini')

它果然起作用了。

我还根据“更好的代码风格”的注释更改了"Source"-Class:

代码语言:javascript
复制
class Source:
    def __init__(self):
        self.config = self.readconfig('../config.ini')
        
    def readconfig(self, filename):
        config = configparser.ConfigParser()
        config.read(filename)
        return config

谢谢你的帮助!

票数 2
EN

Stack Overflow用户

发布于 2021-01-22 10:42:30

代码看起来应该能工作(我找不到任何错误)。试着检查你的配置文件,看看是否真的有这样的一个键。

但是关于代码本身,有几件事我建议修改。

首先,尽管读取配置是Source初始化的一部分,但最好将其作为一个函数,然后调用该函数:

代码语言:javascript
复制
class Source:
    def __init__(self):
        self.config = self.readconfig("./config.ini")

    def readconfig(self, filename):
        config = configparser.ConfigParser()
        config.read(filename)
        return config

永远不要这样做:BinaryEdge = BinaryEdge()。如果您想要创建BinaryEdge的另一个实例,它将调用BinaryEdge变量。把它命名为不同的东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65843283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档