多次指定参数时显示错误

2024-05-28 23:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

多次指定同一个参数时,默认的argparse行为是最后一个指定的值“wins”,覆盖上一个值。我希望argparse在多次指定同一参数时显示错误,而不是默默地覆盖第一个指定的值。你知道吗

怎么能做到呢?你知道吗

我的当前代码:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
    '-t', '--test',      # either of this switches
    type=str,            # parameter is string
    dest='test',         # store in 'test'.
    required=True        # required
)

调用脚本:

myscript.py -t hello -t world

不会导致错误,test具有值world。在这种情况下,我希望argparse显示一个错误,因为默认行为在我看来是容易出错的。你知道吗


Tags: of代码testimportaddparserworld参数
1条回答
网友
1楼 · 发布于 2024-05-28 23:22:26

最简单的方法是使用action="append"并检查结果是否为len>;1:

parser.add_argument(
    '-t', ' test',
    type=str,
    dest='test',
    action='append',
    required=True
)

args = parser.parse_args()

if len(args.test) > 1:
   ...error

但是更好的方法是在解析器中解决问题,这样就可以得到统一的错误处理。这可以通过如下自定义操作完成:

class Once(argparse.Action):
    def __call__(self, parser, namespace, values, option_string=None):
        if hasattr(self, 'seen'):
            raise argparse.ArgumentError(self, 'only one please')
        setattr(self, 'seen', True)
        setattr(namespace, self.dest, values)


parser = argparse.ArgumentParser()
parser.add_argument(
    '-t', ' test',
    type=str,
    dest='test',
    action=Once,
    required=True
)

相关问题 更多 >

    热门问题