Python argparse传递多参数报错:dict对象无names属性,求解决
解决你的argparse参数访问错误
嘿,我来帮你搞定这个问题!你遇到的AttributeError其实是两个小细节没注意到:
错误原因拆解
- 字典 vs 对象的访问方式:
vars(ap.parse_args())会把解析后的参数转换成字典,字典是用['键名']来取值的,不是像对象那样用.调用属性。 - 参数名的自动转换:argparse有个规则——命令行参数里的横杠
-会自动转换成下划线_,所以你定义的--names-list,在字典里对应的键是names_list,而不是names-list(而且Python里也不允许变量/字典键带横杠哦)。
修正后的完整代码
这里给你两种写法,选哪种都行:
写法1:保持字典方式
import argparse ap = argparse.ArgumentParser() ap.add_argument('-n', '--names-list', nargs='+', default=[]) args = vars(ap.parse_args()) # 先检查参数数量,避免索引越界报错 if len(args['names_list']) < 4: print("提示:请至少传入4个参数哦!") exit(1) a = args['names_list'][0] b = args['names_list'][1] c = args['names_list'][2] d = args['names_list'][3] print(a) print(b) print(c) print(d)
写法2:直接用对象访问(更简洁)
其实你可以不用vars(),直接用parse_args()返回的对象,这样就能用.访问参数了:
import argparse ap = argparse.ArgumentParser() ap.add_argument('-n', '--names-list', nargs='+', default=[]) args = ap.parse_args() if len(args.names_list) < 4: print("提示:请至少传入4个参数哦!") exit(1) a = args.names_list[0] b = args.names_list[1] c = args.names_list[2] d = args.names_list[3] print(a) print(b) print(c) print(d)
测试方式
比如你在cmd里这样运行脚本:
python script.py -n Alice Bob Charlie Dave
就能正常输出四个名字啦!
内容的提问来源于stack exchange,提问作者jemma ferdinas
相关产品推荐
相关产品推荐

