【问题标题】:How to force argparse to return a list of strings?如何强制 argparse 返回字符串列表?
【发布时间】:2019-11-26 21:36:37
【问题描述】:

我需要使用 argparse 从命令行接受可变数量的字符串,但是当我传递零个参数时,我得到一个字符串作为结果,而不是一个字符串的列表。

argparser = argparse.ArgumentParser()
argparser.add_argument(
    '--example',
    nargs='*',
    default='default_value',
    type=str)

args = argparser.parse_args()

for e in args.example:
    print(e)

当执行这个python program --example first_arg second_arg 时,我得到了预期的结果:

first_arg
second_arg

即使有一个参数一切都很好,但是执行这个python program我得到:

d
e
f
a
u
l
t
_
v
a
l
u
e

我需要遍历列表而不考虑它有多少元素,我该如何解决这个问题?提前谢谢你。

【问题讨论】:

  • 通常使用print(args) 是个好主意。在这种情况下,它将显示Namespace(example='default value')。默认值是按原样分配的,而不是像已解析的那样。

标签: python argparse iterable


【解决方案1】:

将默认设置为列表而不是字符串:

argparser.add_argument(
    '--example',
    nargs='*',
    default=['default_value'],
    type=str)

【讨论】:

    【解决方案2】:

    您的默认值是str,可以在python中迭代,您可以将默认值更改为这样的列表:

    argparser.add_argument(
        '--example',
        nargs='*',
        default=['default_value'],
        type=str)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 2011-07-20
      • 2010-11-05
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多