python 使用ConfigArgParse解析看起来像列表的字符串

jtw3ybtb  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(81)

Python 3.9.16和ConfigArgParse==1.7
我的conf文件是这样的:

[conf] 
example = [something_in_brackets]

我尝试像这样解析配置:

import configargparse

p = configargparse.ArgParser(default_config_files=['conf.ini'])
p.add('--example')
conf = p.parse_args()

print(conf.example)

我想读取某些配置值作为字符串,但有时值将在括号中,使它看起来像一个列表。当这种情况发生时,ConfigArgParse给出以下错误:

parse.py: error: example can't be set to a list '['something_in_brackets']' unless its action type is changed to 'append' or nargs is set to '*', '+', or > 1

引用ini文件中的conf值不会更改行为。
尝试按照错误消息中的建议使用操作类型append或nargs值会将我的配置值更改为不需要的形式:['something_in_brackets'],而应该是[something_in_brackets]
我也尝试过p.add的选项,如type=str,但我找不到一种方法来达到预期的结果。
有没有可能用ConfigArgParse解析像[example]这样的配置值,而不把它们变成列表?

dgenwo3n

dgenwo3n1#

方法是以string的形式获取example的值,然后以列表的形式对其求值

import ast
import configparser

config = configparser.ConfigParser()
config.read('conf.ini')

my_list = ast.literal_eval(config['conf']['example'])

# Print the list
print(my_list)

我们使用ast.literal_eval,因为它比eval更安全
配置文件

[conf]
example = [1, 2, 3]

相关问题