You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python argparse传递多参数报错:dict对象无names属性,求解决

解决你的argparse参数访问错误

嘿,我来帮你搞定这个问题!你遇到的AttributeError其实是两个小细节没注意到:

错误原因拆解

  1. 字典 vs 对象的访问方式:vars(ap.parse_args())会把解析后的参数转换成字典,字典是用['键名']来取值的,不是像对象那样用.调用属性。
  2. 参数名的自动转换: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:50:51