首页  >  文章  >  后端开发  >  如何使用argparse准确解析布尔值?

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

DDD
DDD原创
2024-10-26 14:05:30518浏览

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中文网其他相关文章!

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