如何设置SafeConfigParser的默认值?

问题描述

| 我有一个配置文件,如下所示:
[job]
mailto=bob
logFile=blahDeBlah.txt
我想使用
SafeConfigParser
读取选项:
values = {} 
config = ConfigParser.SafeConfigParser()
try:
    config.read(configFile)
    jobSection = \'job\'

    values[\'mailto\'] = config.get( jobSection,\'mailto\' )
    values[\'logFile\'] = config.get( jobSection,\'logFile\' )
    # it is not there
    values[\'nothingThere\'] = config.get( jobSection,\'nothingThere\' )
.... # rest of code
最后一行当然会引发错误。如何为
config.get()
方法指定默认值? 再说一次,如果我有一个如下的选项文件:
[job1]
mailto=bob
logFile=blahDeBlah.txt

[job2]
mailto=bob
logFile=blahDeBlah.txt
似乎没有办法为
job1
指定默认选项,这与
job2
部分中的默认选项不同。     

解决方法

对构造函数使用
defaults
参数:
# class ConfigParser.SafeConfigParser([defaults[,dict_type]]) 
#
config = ConfigParser.SafeConfigParser({\'nothingThere\': \'lalalalala\'})
...
...
# If the job section has no \"nothingThere\",\"lalalalala\" will be returned
# 
config.get(jobSection,\'nothingThere\')
    ,您还可以使用默认的\“。ini \”文件,并在实际配置文件之前读取它。 default.ini:
[job1]
mailto=jack
logfile=default.log

[job2]
mailto=john
logfile=default.log
config.ini:
[job1]
mailto=sparrow
logfile=blah.log

[job2]
logfile=blah2.log
解析:
config = ConfigParser.SafeConfigParser()
config.read(\'default.ini\')
config.read(\'config.ini\')

print config.get(\'job1\',\'mailto\')
# -> sparrow (from config.ini)

print config.get(\'job1\',\'logfile\')
# -> blah.log (from config.ini)

print config.get(\'job2\',\'mailto\')
# -> john (from default.ini)

print config.get(\'job2\',\'logfile\')
# -> blah2.log (from config.ini)
    ,您可以使用[DEFAULT]部分为未在其他任何部分中定义的属性设置默认值。 例如。
[DEFAULT]
checkout_root: /data/workspace

[pingpong]
name: Ping Pong App
checkout_root: /home/pingpong
src: %(checkout_root)s/src

[dingdong]
name: Ding Dong App
src: %(checkout_root)s/dingdong_src
对于ding ding应用,
src
的值为
/data/workspace/dingdong_src
    ,在Python 3中,您可以为get()方法提供一个后备值,如下所示:
values[\'nothingThere\'] = config.get(\'job\',\'nothingThere\',fallback=0)
print(values[\'nothingThere\'])
# -> 0
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...