我正在尝试创建一个包含用户名密码等信息的配置。
我创建了一个包含此内容的ini文件:
[DEFAULT]
username: user
password: pass
然后我有一个配置映射类,如:
import configparser
class ConfigSectionMap:
def __init__(self):
my_config_parser = configparser.ConfigParser()
my_config_parser.read('inilocation')
print(my_config_parser.default_section)
def config_map(self, section):
dict1 = {}
options = self.my_config_parser.options(section)
for option in options:
try:
dict1[option] = self.my_config_parser.get(section, option)
if dict1[option] == -1:
print("skip: %s" % option)
except:
print("exception on %s!" % option)
dict1[option] = None
return dict1
在我想要使用它的主要课程中,我这样做:
from config_section_map import ConfigSectionMap
print(ConfigSectionMap.config_map(("DEFAULT")['password']))
运行时我收到错误:
TypeError:字符串索引必须是整数
我一直在关注文档,但它不起作用:https://wiki.python.org/moin/ConfigParserExamples
或者,如果有更简单的方法,请告诉我
编辑:
更改为此
print(ConfigSectionMap.config_map("DEFAULT")['password'])
显示
TypeError: config_map() missing 1 required positional argument: 'section'
答案 0 :(得分:3)
调用配置映射时出错了。配置映射采用一个部分,如“DEFAULT”。
你要做的是发送('DEFAULT')['密码']。但是('DEFAULT')求值为一个字符串,字符串索引只能取整数。
尝试开始索引只是您输入的错误。
使用ConfigSectionMap时出现问题。就像现在一样,您正在使用属性引用,这是合法的,但不是使用config_map的预期方法。 config_map()
在对config_map进行引用时,需要两个参数(self, section)
,只传递一个参数。
你要么自传,要么你做一个实例。通过调用ConfigSectionMap(),您将获得一个在self中启动了属性的实例。
将代码更改为以下代码,您是否看到了区别?
from config_section_map import ConfigSectionMap
conf_object = ConfigSectionMap()
print(conf_object.config_map("DEFAULT")['password'])
['password']
现在应用于来自config_map的返回结果,而不是它的参数。
解决问题options = self.my_config_parser.options(section) AttributeError: 'ConfigSectionMap' object has no attribute 'my_config_parser'
你必须在self中定义属性,否则它将保留在__init__
的本地范围内
class ConfigSectionMap:
def __init__(self):
self.my_config_parser = configparser.ConfigParser()
self.my_config_parser.read('inilocation')
print(self.my_config_parser.default_section)
def config_map(self, section):
dict1 = {}
options = self.my_config_parser.options(section)
for option in options:
try:
dict1[option] = self.my_config_parser.get(section, option)
if dict1[option] == -1:
print("skip: %s" % option)
except:
print("exception on %s!" % option)
dict1[option] = None
return dict1
正如@officialaimm的评论指出的那样,将DEFAULT
尝试更改配置命名为
[SomeThingElse]
username: user
password: pass
代替
答案 1 :(得分:2)
在问题的最后部分给出另一个答案
Or if there is an easier way please show me
OPTION1 = 'test'
将其保存在config.py
代码
import config
getattr(config, 'OPTION1', 'default value if not found')