如何使用argparse准确解析布尔值?

DDD
发布: 2024-10-26 14:05:30
原创
609 人浏览过

How to Parse Boolean Values Accurately with `argparse`?

使用 argparse 解析布尔值

使用 argparse 解析布尔命令行参数时,通常会遇到所需行为不同的情况从实际输出来看。当参数指定为“--foo True”或“--foo False”时,会发生这种情况。

要解决此问题,必须深入研究代码:

<code class="python">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)</code>
登录后复制

令人惊讶的是,尽管指定“False”作为参数,parsed_args.my_bool 的计算结果为 True。当 cmd_line 修改为 ["--my_bool", ""] 时,这种异常现象也会持续存在,逻辑上应评估为 False。

解决方案

克服此挑战要准确解析布尔值,一种推荐的方法是采用更传统的样式:

command --feature
登录后复制

command --no-feature
登录后复制

argparse 毫不费力地支持这种格式:

Python 3.9 及以上:

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

Python 3.9 以下:

<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>
登录后复制

或者,如果 "--arg ;”首选格式,ast.literal_eval 或自定义函数(如下所示)可以用作“type”参数:

<code class="python">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?</code>
登录后复制

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板