如何限制使用 argparse 解析的值(例如,将整数限制为正值)?

2023-12-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()

为游戏数量提供负值是没有意义的,但是type=int允许任何整数。例如,如果我运行python simulate_many.py -g -2, args.games将被设置为-2并且程序将继续运行,就好像没有任何问题一样。

我意识到我可以明确检查args.games解析参数后。但我可以做吗argparse自己检查这个条件吗?如何?

我希望它以这种方式工作,以便自动使用消息可以向用户解释需求。理想情况下,输出将类似于:

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'

就像它当前处理无法转换为整数的参数一样:

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'

这应该可以利用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)

这基本上只是一个改编的例子perfect_square函数在docs on argparse.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何限制使用 argparse 解析的值(例如,将整数限制为正值)? 的相关文章

随机推荐

  • Apache 时间戳不正确

    我正在使用运行 PHP 的 WAMP 服务器 在特定步骤中 我尝试捕获系统时间并使用以下查询将其添加到数据库中 strSQLInsert UPDATE track SET State Repeat DateTime date m d Y h
  • 在 IntelliJ IDEA 和 Gradle 上调试时等待用户输入

    我有最简单的 Java 应用程序 如果从命令行执行 它就可以工作 但如果我想通过 IntelliJ IDEA 14 Ultimate 进行调试 System in read 部分总是返回 1 无需在其中输入任何内容 import java
  • 给定值 x 和 y,如果为 true,则返回规则名称

    这是我的序言文件 male bob male john female betty female dana father bob john father bob dana mother betty john mother betty dana
  • ColdFusion 相当于 PHP hash_hmac

    key 12345678876543211234567887654321 iv 1234567887654321 plaindata This is a test string enc base64 encode mcrypt encryp
  • 如何使用 System.Drawing 绘制表格

    我想使用 System Drawings 绘制一个表格 然后用一些文本填充单元格 该文本每隔几秒钟就会在不同的时刻发生变化 这是一个游戏 其中有一个网格 每隔几秒钟 随机单元格就会显示一个数字 然后用户必须在其下面的文本框中输入答案 此外
  • R中字符类的计数函数

    我的代码正常工作 然后 RStudio 崩溃了 当我重新打开它时 我的一行代码现在不起作用 CodeTable lt count unique Data Code 以前 这创建了一个包含 3 列的简单数据库 1 数字顺序 2 唯一代码 3
  • 从android中点击通知获取数据

    嘿伙计们 我需要帮助如何从使用广播接收器设置的待处理意图中获取数据 我想要发生的是在单击通知时获取我的活动所需的 id 数据 这就是我制作额外内容的方式 public class AlertReceiver extends Broadcas
  • 如何在 Haskell 中计算直方图?

    I found Statistics Sample Histogram 但我似乎无法使用它 如果我希望能够将列表分为四个类别 我希望能够执行以下操作 import Statistics Sample Histogram histogram
  • Opencv:您的设备似乎不支持相机(或者已锁定)

    我在 Android 4 0 4 的三星平板电脑上使用 opencv 2 4 5 的 Face Detection 和 Android 4 2 2 该应用程序可以使用前置摄像头来校准我的脸部 但是 当我使用此应用程序同时播放视频和面部检测时
  • 应用程序启动时导航抽屉始终处于膨胀状态

    我正在尝试将导航抽屉添加到我的主要活动中 在 Activity main xml 的设计视图中 它应该作为阴影动画在活动布局的左侧可见 我不知道我应该在这里使用什么术语 向右拖动 滑动时应该可见 但就我而言 它默认覆盖整个活动 并且不显示活
  • 获取 Dynamics 365 的身份验证令牌时出现错误 AADSTS90002

    我在尝试从 Net 客户端使用 Dynamics 365 进行身份验证时遇到以下错误 AADSTS90002 Tenant authorize not found This may happen if there are no active
  • 无法在带有 Xcode 4.3.1 和 IOS 的 iPhone 4.2.1 上运行应用程序

    我希望有人可以提供帮助 这个问题已经困扰我一段时间了 我正在运行 Xcode 4 3 1 和基本 SDK iOS 5 1 iPhone版本是4 2 1 我相信是旧的3S型号 当点击 运行 时 Xcode 编译正常 并表示它正在手机上运行我的
  • 将 unicode 转换为 char

    如何将 Unicode 字符串转换为char or char const in 内河码头 c String text Hello world char txt AnsiString text c str Older text t str i
  • 如何在 C# 中监控剪贴板内容变化? [复制]

    这个问题在这里已经有答案了 I want to have this feature in my C program When the user do Ctrl C or Copy anywhere i e when the clipboar
  • 在matlab中找到峰值

    假设我们确定向量中的峰值如下 我们有长度为 m 的实数值一维向量 或者 x 1 x 2 x 米 如果 x 1 gt x 2 则显然对于第一个点 Peak 1 x 1 否则我们将 x 3 与 x 2 进行比较 如果 x 3 indexes p
  • 如何将工具提示添加到 JavaFX Canvas 的矩形区域

    在我的 JavaFX 应用程序中 我有一个TableView具有多个列 其中一列以图形形式显示数据 为此 我创建了一个CanvasCell创建并管理自己的对象Canvas来处理绘图 绘图部分工作得很好 我现在想把Tooltips范围内的一些
  • 我怎样才能得出这个观点?

    List gt l user我有一个List具有用户引用字段的节点 l user Story gt s user然后我有Story也有用户引用字段的节点 s user 之间没有直接联系List and Story 我想添加一个视图List列
  • GWT 在 CloseHandler 中检测浏览器刷新

    我有一个 GWT 应用程序 我想在用户离开应用程序时运行一些代码以强制注销并删除任何数据等 为此 我使用 CloseHandler 并使用 Window addCloseHandler 注册它 我注意到 当单击刷新按钮时 会运行 onClo
  • dalvikvm:找不到类“android.*”

    在此输入图像描述开发时 应用程序在Android 5 0系统上可以正常使用 但是在5 0以下的系统中会出现应用程序无响应的情况 但不知道是什么原因 错误日志如下 E dalvikvm Could not find class android
  • 如何限制使用 argparse 解析的值(例如,将整数限制为正值)?

    到目前为止我有这个代码 import argparse parser argparse ArgumentParser parser add argument g games type int default 162 help The num