使用 argparse 解析布尔值

2024-02-03

我想使用 argparse 来解析写为“--foo True”或“--foo False”的布尔命令行参数。例如:

my_program --my_boolean_flag False

但是,以下测试代码并没有达到我想要的效果:

import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)

Sadly, parsed_args.my_bool评估为True。即使我改变了也是如此cmd_line to be ["--my_bool", ""],这是令人惊讶的,因为bool("")评估为False.

如何让 argparse 进行解析"False", "F",以及它们的小写变体是False?


我认为更规范的方法是通过:

command --feature

and

command --no-feature

argparse很好地支持这个版本:

Python 3.9+ https://docs.python.org/3/library/argparse.html#action:

parser.add_argument('--feature', action=argparse.BooleanOptionalAction)

Python

parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)

当然,如果你真的想要--arg <True|False>版本,你可以通过ast.literal_eval作为“类型”,或用户定义的函数......

def t_or_f(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
       return True
    elif 'FALSE'.startswith(ua):
       return False
    else:
       pass  #error condition maybe?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 argparse 解析布尔值 的相关文章

随机推荐

  • 即使未实现抽象方法,实例化抽象类时也不会出现错误

    我正在尝试下面的Python代码 from abc import ABCMeta abstractmethod class Bar metaclass ABCMeta abstractmethod def foo self pass cla
  • WPF:旋转 2D 矢量

    我想旋转给定的 2D 矢量 是否有 WPF 内置函数可以实现此目的 目前我正在手动执行此操作 Vector v new Vector v X 10 v Y 10 Vector v2 new Vector v2 X v X Math Cos
  • 类型的替代 id 生成器

    In 我的一个项目 https github com skypjack entt 我有一个ID生成器 https github com skypjack entt blob master src entt core family hpp对于
  • Pluck id(整数)转换为字符串 Laravel

    从数据库中提取数据时 我得到id作为字符串 alphabets new Alphabet return alphabets gt pluck name id Output 1 Apple 2 Ball 3 Cat Expected 1 Ap
  • 简单代码导致读取变量时出错:无法访问地址处的内存

    我正在尝试使用支持 python 的 gdbMinGW 构建 http sourceforge net projects mingwbuilds 我遇到了一个错误 这是一段相当简单的代码 在 MSVC 下调试时效果很好 D CppProje
  • Pentaho Kettle中如何实现数据库连接参数验证

    我有一个例子 我得到 X 行数据库名称作为我需要连接的参数 我已成功完成工作和转换 为作为参数给出的每个数据库名称重复表输入步骤 因此 当这些数据库名恰好有效时 这一切都会很好地工作 但是 如果这些名称之一无效 给定名称的数据库不存在 则表
  • MediaPlayer 在单独的线程中与通过 startForeground() 在服务中运行

    所以 我在一个单独的线程中流式传输音乐 如果我离开应用程序 onPause onStop 被呼叫等 音乐继续播放 但最终 在打开其他应用程序并在它们之间切换并返回主屏幕之后 我的应用程序被终止 没有崩溃 只是一个WIN DEATH and
  • 使用 javascript、HTML5 添加注释、文本到视频中的特定帧 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库支持在视频帧上突出显示特定内容 有点视频编辑 我想在视频帧中放置任何矩形或圆形并提供一些文
  • python中的滚动函数忽略nans

    https pandas pydata org pandas docs version 0 17 0 generated pandas rolling quantile html https pandas pydata org pandas
  • 使用 React.cloneElement 和 render prop 将 ref 传递给类组件

    我正在编写一个处理一些内部的组件state根据一个ref它的子级 例如与该子级的引用相关的鼠标事件 该组件正在使用render prop传递相关部分state给它的孩子 并渲染孩子ref通过附加React cloneElement util
  • 参考数据模式

    与此线程类似 但不完全一样 如何以线程安全的方式缓存信息 https stackoverflow com questions 1048239 how to cache information in a dao in a threadsafe
  • 对声明为友元的类进行单元测试(内部)

    在我的一些测试助手代码中 我有一个IDbSet Of T 实施称为FakeDbSet Of T 它在没有实际数据库的情况下模拟了许多 EF 行为 我已经宣布了班级Friend因为我想强制所有代码像交互一样与它交互IDbSet Of T 内部
  • 使用 css 打印模式下每页的页眉和页脚

    我有一个网络应用程序 它有一个可能超过一页的报告 我想在每一页中打印页眉和页脚 我找到并尝试这个 在每页中重复报告标题 https www servoyforge net boards 2 topics 215 r 220 message
  • 使用 dplyr 从分组 data.frame 中以组级汇总统计数据为条件进行行采样

    In 这篇文章关于对采样行数下限的比例进行采样 https stackoverflow com questions 74176819 sample a percentage of entries in a dataframe but wit
  • jquery 选择两个非兄弟元素之间的元素

    我已经删除了属性 但它是一些自动生成的 HTML img class p div hello world p font font size 2 text img class p some text font font p img class
  • 新 EC2 实例 putty 上的连接被拒绝

    我已根据从现有服务器生成的 AMI 在 EC2 上创建了一个服务器实例 创建过程中一切顺利 我为新服务器指定了与旧服务器相同的密钥 但是 当我尝试通过 putty 连接到新服务器时 我收到一条 连接被拒绝 消息 另外 尽管我选择了允许 IC
  • 如何将新函数插入我的 R 包中?

    我使用这些在 R 中制作了一个包指示 http web mit edu insong www pdf rpackage instructions pdf 我使用 RStudio 我想向包中添加一个新函数 我是否只需将函数放入 R 脚本中并将
  • Doctrine2:多态查询:搜索子类的属性

    我有一个处理客户订单的项目 其中一些订单是通过亚马逊网站订购的 所以我有一个 Order 实体和一个扩展它的 AmazonOrder 实体 AmazonOrder 添加的一件事是 AmazonOrderId 我需要实现广泛的搜索功能 用户可
  • PathTooLongException Xamarin Droid 项目

    我创建了一个具有长路径的 Xamarin Forms 项目 在构建它时出现此错误 System IO PathTooLongException 指定的路径 文件名或两者都太长 完全限定的文件名必须少于 260 个字符 目录名必须少于 248
  • 使用 argparse 解析布尔值

    我想使用 argparse 来解析写为 foo True 或 foo False 的布尔命令行参数 例如 my program my boolean flag False 但是 以下测试代码并没有达到我想要的效果 import argpar