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