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