Python使用argparse从动态参数列表中提取key/value的实现方法
你可以通过步长为2的遍历方式直接从剩余参数数组中两两提取键值,同时建议先做参数合法性校验避免异常,实现代码如下:
import argparse def set_config(key, val): # 你的原有配置设置逻辑 print(f"set {key} = {val}") parser = argparse.ArgumentParser(description='My app.') parser.add_argument('-n', '--project-name', required=False, default='test') args, remaining_argv = parser.parse_known_args() # 校验参数长度是否为偶数,避免出现单独的key无对应value的异常 if len(remaining_argv) % 2 != 0: raise ValueError("额外参数格式错误,需按照「键1 值1 键2 值2……」的格式传入") # 步长为2遍历数组,每次取一组键值 for idx in range(0, len(remaining_argv), 2): # 可选操作:去掉参数键前面的-、--前缀,比如传入--max-retry 10,自动提取key为max-retry key = remaining_argv[idx].lstrip('-') value = remaining_argv[idx+1] set_config(key, value)
如果追求更简洁的写法,也可以用迭代器配对的方式实现,不需要手动控制索引:
arg_iter = iter(remaining_argv) for key, value in zip(arg_iter, arg_iter): set_config(key.lstrip('-'), value)
注意你原有代码里存在变量名错误:parser.parse_known_args()返回的剩余参数变量名是remaining_argv,后续计算长度时误写为了remaining_args,需要注意修正。
内容的提问来源于stack exchange,提问作者Ken J
相关产品推荐
相关产品推荐

