parser.add_argument('-auto', action='store_true')
How can I store false if -auto is unspecified? I can faintly remember that this way, it stores None if unspecified
-auto
和
import argparse parser=argparse.ArgumentParser() parser.add_argument('-auto', action='store_true', ) args=parser.parse_args() print(args)
跑步
% test.py
产量
Namespace(auto=False)
因此它似乎默认存储 False。
False
store_true选项自动创建默认值 假的。
store_true
同样,当不存在命令行参数时,store_false将默认为 没错。
store_false
这种行为的根源是简洁明了的: http://hg.python.org/cpython/file/2.7/Lib/argparse.py#l861
Argparse 文档对这个主题不清楚,所以我现在更新它们: http://hg.python.org/cpython/rev/49677cc6d83a
Store _ false 在缺省情况下实际默认为 0(可以通过测试来验证)。要更改它的默认值,只需将 default=True添加到声明中。
0
default=True
因此,在这种情况下: parser.add_argument('-auto', action='store_true', default=True)
parser.add_argument('-auto', action='store_true', default=True)
Raymond Hettinger 已经回答了 OP 的问题。
但是,我的团队在使用“ store _ false”时遇到了可读性问题。特别是当新成员加入我们的团队。这是因为最直观的思维方式是,当用户指定一个参数时,与该参数对应的值将为 True 或1。
例如,如果代码是-
parser.add_argument('--stop_logging', action='store_false')
代码读取器可能预期,当 stop _ log 中的值为 true 时,日志语句将关闭。但是下面这样的代码将导致所需行为的 相反-
if not stop_logging: #log
另一方面,如果接口定义如下,那么“ if 语句”可以工作,并且读取起来更直观
parser.add_argument('--stop_logging', action='store_true') if not stop_logging: #log
我发现默认值在 OSX 和 Linux 之间有所不同,如果没有指定的话。
使用以下代码行,
然后从命令行中省略-auto 正如预期的那样,Mac 的结果是 auto 被赋值为 False, 而在 Ubuntu 上,Linux 自动默认为 True。