当前位置: 首页 > 知识库问答 >
问题:

在Python中,使用Argparse,只允许正整数

太叔航
2023-03-14

标题几乎概括了我希望发生的事情。

这是我所拥有的,虽然程序不会在非正整数上爆炸,但我希望用户被告知非正整数基本上是无稽之谈。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-g", "--games", type=int, default=162,
                    help="The number of games to simulate")
args = parser.parse_args()

和输出:

python simulate_many.py -g 20
Setting up...
Playing games...
....................

带有负数的输出:

python simulate_many.py -g -2
Setting up...
Playing games...

现在,显然我可以添加一个if来确定if参数。games是否定的,但我很好奇是否有办法在argparse级别捕获它,以便利用自动使用打印。

理想情况下,它会打印类似的东西:

python simulate_many.py -g a
usage: simulate_many.py [-h] [-g GAMES] [-d] [-l LEAGUE]
simulate_many.py: error: argument -g/--games: invalid int value: 'a'

像这样:

python simulate_many.py -g -2
usage: simulate_many.py [-h] [-g GAMES] [-d] [-l LEAGUE]
simulate_many.py: error: argument -g/--games: invalid positive int value: '-2'

现在我正在这么做,我想我很高兴:

if args.games <= 0:
    parser.print_help()
    print "-g/--games: must be positive."
    sys.exit(1)

共有3个答案

耿联
2023-03-14

如果arg有一个可预测的最大值和最小值,那么最快捷的方法就是使用选项和范围

parser.add_argument('foo', type=int, choices=xrange(0, 1000))
通建安
2023-03-14

type将是处理条件/检查的推荐选项,如Yuushi的答案所示。

在特定情况下,如果已知上限,也可以使用choices参数:

parser.add_argument('foo', type=int, choices=xrange(5, 10))

注意:对于python 3. x使用range而不是xrange

詹杰
2023-03-14

这应该可以利用type。您仍然需要定义一个实际的方法来决定这一点:

def check_positive(value):
    ivalue = int(value)
    if ivalue <= 0:
        raise argparse.ArgumentTypeError("%s is an invalid positive int value" % value)
    return ivalue

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

这基本上只是argparse上文档中的perfect\u square函数的一个改编示例。

 类似资料:
  • 问题内容: 标题几乎总结了我想发生的事情。 这就是我所拥有的,虽然程序不会在非正整数上崩溃,但我希望通知用户非正整数基本上是无稽之谈。 并输出: 输出为负: 现在,显然我可以添加一个if来确定是否为负,但是我很好奇是否有一种方法可以将其捕获到该级别,以便利用自动用法打印。 理想情况下,它将打印类似于以下内容的内容: 像这样: 现在我正在这样做,我想我很高兴: 问题答案: 这应该是可以利用的。您仍然

  • 问题内容: 我想知道与int相比,java是否自动将Integer转换为int?还是==尝试比较原始元素上的引用? 这是真的吗?还是我需要做? 问题答案: 是的,使用参数进行比较时,如有必要,将取消装箱。 Java语言规范的相关部分: 15.21.1数值相等运算符==和!= 如果相等运算符的操作数都是数字类型,或者一个是数字类型,而另一个可以转换(第5.1.8节)为数字类型,则对操作数(第5.6.

  • 我试图在JavaFX中创建一个只接受整数值的TextArea?有谁能给我一些建议,告诉我如何实现这一点吗?

  • 问题内容: 大家好,所以我试图允许一些文本输入在发送之前经过正则表达式检查。我希望文本仅包含AZ,0-9和空格“”字符。现在是我的代码: 但是,当我输入“这是一个测试”之类的内容时,这仍然会给出结果 有任何想法吗?谢谢大家 问题答案: 您不在正则表达式中包含空格。请尝试以下操作:

  • 问题内容: 在angularjs中,有任何可用的功能,仅允许将数字键入文本框中,例如 问题答案: 此功能正是您所需要的。http://docs.angularjs.org/api/ng.directive:input.number 编辑: 您可以将jquery插件包装到指令中。我在这里创建了一个示例:http : //jsfiddle.net/anazimok/jTJCF/ HTML: CSS:

  • 问题内容: 我有一个组件和一个组件,当有不是组件的子代时,我想抛出一个错误。这可能吗,还是我想解决错误的问题? 问题答案: 您可以为每个孩子使用displayName,可通过以下类型进行访问: