我正在尝试检查用户是否提供了可选参数,但如果未提供,我想设置其默认值。如果我尝试通过利用
if
来使用 None
语句,帮助字符串中的 default
会显示 None
,这是不正确的
import argparse
parser = argparse.ArgumentParser(usage=__file__ + " [--options]",
description=__doc__,
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("--scheme", choices=["A", "B"])
parser.add_argument("--min-A", type=float, help="Default=5")
parser.add_argument("--min-B", type=float, help="Default=10")
args = parser.parse_args()
if args.scheme == "A":
if args.min_A:
min_A = args.min_A
else:
min_A = 5
else:
if args.min_A:
parser.error("--min-A can only be provided when --scheme is A")
#similar code for B
这里,帮助字符串自动将默认值设置为 None。如果我将默认值设置为 5,那么我无法检查用户是否已提供
--min-A
,因为当输入中缺少该选项时,它会存储默认值而不是 None。
关于如何执行此操作有什么想法吗?
formatter_class=argparse.ArgumentDefaultsHelpFormatter
^ 这个自定义格式化程序类是您的问题。您只需将其删除即可。然后你的帮助文本将像这样呈现:
usage: myscript.py [--options]
options:
-h, --help show this help message and exit
--scheme {A,B}
--min-A MIN_A Default=5
--min-B MIN_B Default=10