【问题标题】:argparse-assign list items to variables [duplicate]argparse-将列表项分配给变量[重复]
【发布时间】:2018-11-05 06:23:12
【问题描述】:

我想使用 cmd 将多个参数传递给 python 脚本。下面是我用过的代码。

import argparse

ap = argparse.ArgumentParser()
ap.add_argument('-n', '--names-list', nargs='+', default=[])  
#item1 item2 item3 item4
args = vars(ap.parse_args())

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)

当我执行代码时,我收到如下错误消息。

File "D:\script.py", line 7, in <module>
a = args.names-list[0]
AttributeError: 'dict' object has no attribute 'names'

由于我对此很陌生,有人可以帮我解决这个问题吗?

【问题讨论】:

  • 查看欺骗目标:a = args.names-list[0] 实际上是a = args.names - list[0]。你想要的是a = args.names_list[0]
  • 我不同意这是一个骗局。 OP 有多个错误,其中只有一个由重复项解决。
  • @Robᵩ 虽然是真的,但欺骗目标还显示了 parse_args 的正确用法,并且欺骗确实解决了遇到的特定问题/错误。我敢肯定,您写的答案仍然对 OP 有帮助,但未来的读者可能会通过欺骗得到更好的服务。
  • 在调试argparse 时,它有助于print(args)(甚至在使用vars 之前)。这将显示所有属性、它们的正确名称和值。

标签: python python-3.x command-line-arguments argparse


【解决方案1】:

此行不正确。你不需要调用vars()

args = vars(ap.parse_args())

试试这个:

args = ap.parse_args()

此外,参数名称会自动从使用- 转换为使用_。试试这个:a = args.names_list[0]

这是你的程序,有更正:

import argparse

ap = argparse.ArgumentParser()
ap.add_argument('-n', '--names-list', nargs='+', default=[])
#item1 item2 item3 item4
args = ap.parse_args()

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)

结果如下:

$ python x.py -n one two three four
one
two
three
four

【讨论】:

  • 我遇到了这样的错误。 a = args.names-list[0] AttributeError: 'Namespace' 对象没有属性 'names'
  • 你应该使用args.names_list,而不是args.names-list
  • 它显示list index out of range的错误消息
  • 如果您不提供 4 个参数,它会说:args.names_list 仅与您放入其中的项目数量一样长。
  • 另外值得一提的是,如果你想强制他们提供恰好 4 个参数,你可以使用 nargs=4 而不是 nargs='+'
猜你喜欢
  • 2019-12-03
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 2019-10-17
  • 1970-01-01
  • 2020-10-08
相关资源
最近更新 更多