首页  >  文章  >  后端开发  >  如何在argparse中正确解析布尔值?

如何在argparse中正确解析布尔值?

Linda Hamilton
Linda Hamilton原创
2024-10-26 18:56:29607浏览

How Can I Parse Boolean Values Correctly in argparse?

使用 argparse 解析布尔值

在 argparse 中,解析布尔命令行参数是一项常见任务,但尝试时会出现常见的陷阱使用 type=bool 参数解析“--foo True”或“--foo False”等值。令人惊讶的是,即使使用空字符串作为参数(例如“--foo “”),解析的值也会计算为 True。

为了正确的布尔解析,argparse 提供了两种推荐的方法:

规范方法:

使用 argparse 原生支持的 '--feature' 和 '--no-feature' 语法:

<code class="python">parser.add_argument('--feature', action=argparse.BooleanOptionalAction)</code>

在 3.9 以下的 Python 版本中:

<code class="python">parser.add_argument('--feature', action='store_true')
parser.add_argument('--no-feature', dest='feature', action='store_false')
parser.set_defaults(feature=True)</code>

使用这种方法,“--feature”的存在会将值设置为 True,而“--no-feature”将其设置为 False。缺少任一参数默认为 True。

可选方法(使用类型转换):

如果“--arg ”语法为根据需要,可以使用自定义类型转换函数:ast.literal_eval:

<code class="python">parser.add_argument("--arg", type=ast.literal_eval)</code>

或者,可以创建用户定义的函数:

<code class="python">def true_or_false(arg):
    ua = str(arg).upper()
    if 'TRUE'.startswith(ua):
       return True
    elif 'FALSE'.startswith(ua):
       return False
    else:
       raise argparse.ArgumentTypeError('Invalid boolean value')</code>

以上是如何在argparse中正确解析布尔值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn