【问题标题】:How to allow only positive integer using argparse [duplicate]如何使用 argparse 仅允许正整数 [重复]
【发布时间】:2021-03-06 20:49:45
【问题描述】:

如果用户不输入 num2,我会将其设置为默认数字 1。但是,我也在尝试实现如果用户输入数字,它必须大于 0。

import argparse
group = parser.add_mutually_exclusive_group()

group.add_argument('-n2', '--num2', action='store_true', default=1, choices=range(0))

我环顾四周,发现choices=ranges 允许我为数字设置一个范围,但是,我得到一个错误提示

TypeError: __init__() got an unexpected keyword argument 'choices'

【问题讨论】:

  • 也许这个错误是指一个错误的参数而不是一个错误的关键字。尝试使用非空容器,例如 range(5)

标签: python


【解决方案1】:

您可以使用type 来检查正整数输入,如下所示:

import argparse


def check_positive(value):
    try:
        value = int(value)
        if value <= 0:
            raise argparse.ArgumentTypeError("{} is not a positive integer".format(value))
    except ValueError:
        raise Exception("{} is not an integer".format(value))
    return value


parser = argparse.ArgumentParser(...)
parser.add_argument('--foo', type=check_positive)

args = parser.parse_args()
print('args: {}'.format(args.foo))

【讨论】:

    【解决方案2】:

    在进行了一些参数更改后,我能够解决问题。我不确定这是否与您想要的相同

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('-n2', '--num2',  default=1, type=int,choices=range(0))
    

    我刚刚删除了操作,它工作正常。我也是 python 新手,所以如果它不是你需要的,请告诉我

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 2013-03-28
      • 2019-12-16
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 2012-10-12
      • 2013-12-30
      • 1970-01-01
      相关资源
      最近更新 更多