问题:
使用 argparse 解析布尔命令行参数时,为什么值会发生变化像“--foo False”评估为 True 而不是 False?
答案:
规范方法:
推荐的方法是使用以下格式:
command --feature
要否定该功能,请使用:
command --no-feature
argparse 对此提供内置支持:
Python
3.9:parser.add_argument('--feature', action='store_true') parser.add_argument('--no-feature', dest='feature', action='store_false') parser.set_defaults(feature=True)
自定义解析的替代方法:
如果首选“--foo True/False”格式,则一个选项是使用 ast.literal_eval 或自定义函数作为类型:import ast def t_or_f(arg): ua = str(arg).upper() if 'TRUE'.startswith(ua): return True elif 'FALSE'.startswith(ua): return False else: pass # Handle error condition appropriately
<code class="python">parser.add_argument("--my_bool", type=ast.literal_eval) parser.add_argument("--my_bool", type=t_or_f)</code>
以上是为什么使用 argparse 解析布尔参数时'--foo False”计算结果为 True?的详细内容。更多信息请关注PHP中文网其他相关文章!