检查 ArgParse 可选参数是否已设置,提供默认值

问题描述 投票:0回答:1

我正在尝试检查用户是否提供了可选参数,但如果未提供,我想设置其默认值。如果我尝试通过利用

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。

关于如何执行此操作有什么想法吗?

python command-line-arguments argparse
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.