【问题标题】:can argparse store positional number arguments as simple variables?argparse 可以将位置数字参数存储为简单变量吗?
【发布时间】:2012-02-15 16:54:46
【问题描述】:

我想使用 argparse 来获取一些 (3) 整数参数,并将它们用作程序主体中的变量。运行下面的代码,每个变量都存储在一个元素列表中。这当然不是什么大问题,但是是否可以设置解析器将每个值放入一个简单的整数变量中?

import argparse

def main():
    parser = argparse.ArgumentParser(description='three positional integer arguments.')
    parser.add_argument('picks', type=int, nargs='+', default=10,
                       help='number of selections per execution')
    parser.add_argument('minchunk', type=int, nargs='+', default=2,
                       help='min chunk size')
    parser.add_argument('maxchunk', type=int, nargs='+', default=8,
                       help='max chunk size')

    args = parser.parse_args(['1', '2', '3'])
    print args
    return 0

【问题讨论】:

  • 如果你这样做,你会突然得到完全不同和不兼容的类型,这取决于传递了多少数字。如果您想支持多个值,只需始终使用列表即可。

标签: python arguments argparse


【解决方案1】:

这样的?

(a,b,c) = parser.parse_args(['1','2','3'])

【讨论】:

  • 如果您愿意,甚至可以省略第一组括号。
【解决方案2】:

nargs = '+' 告诉argparse 在列表中收集 1 个或多个参数。 如果你删除nargs = '+':

import argparse

def main():
    parser = argparse.ArgumentParser(
        description = 'three positional integer arguments.')
    parser.add_argument('picks', type = int, default = 10, nargs = '?',
                       help = 'number of selections per execution')
    parser.add_argument('minchunk', type = int, default = 2, nargs = '?',
                       help = 'min chunk size')
    parser.add_argument('maxchunk', type = int, default = 8, nargs = '?',
                       help = 'max chunk size')

    args = parser.parse_args()
    print args

main()

产量

Namespace(maxchunk=3, minchunk=2, picks=1)

【讨论】:

  • 谢谢,这让我走上了正轨。不幸的是,使用 nargs 的默认值,参数不是可选的;如果未提供恰好 3,则会引发错误(“参数太少”或“无法识别的参数”)。使用 nargs='?'对我来说似乎是正确的选择,如果存在则使用单个值,否则使用默认值。如果提供的参数超过 3 个,则会酌情引发“无法识别的 arg”错误。
  • thermalCat,感谢您的反馈。我已经添加了nargs = '?',所以默认值有效果。
猜你喜欢
  • 2022-01-28
  • 2013-01-13
  • 2011-05-27
  • 1970-01-01
  • 2023-04-02
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多