Why in argparse, a 'True' is always 'True'?
本问题已经有最佳答案,请猛点这里访问。
下面是最简单的python脚本,名为test.py:
1 2 3 4 5 6 | import argparse parser = argparse.ArgumentParser() parser.add_argument('--bool', default=True, type=bool, help='Bool type') args = parser.parse_args() print(args.bool) |
但当我在命令行上运行此代码时:
1 2 | python test.py --bool False True |
而当我的代码读取
为什么?
您没有传入
只有长度为0的字符串测试为假:
1 2 3 4 5 6 | >>> bool('') False >>> bool('Any other string is True') True >>> bool('False') # this includes the string 'False' True |
使用
1 | parser.add_argument('--bool', default=True, action='store_false', help='Bool type') |
现在省略该开关将
1 2 3 4 5 | python test.py True python test.py --bool False |
如果必须解析包含
1 2 3 4 | def boolean_string(s): if s not in {'False', 'True'}: raise ValueError('Not a valid boolean string') return s == 'True' |
并以此作为转换参数:
1 | parser.add_argument('--bool', default=True, type=boolean_string, help='Bool type') |
在这一点上,