Python argparse-禁用相同参数的出现

Python argparse-禁用相同参数的出现,python,python-3.x,argparse,Python,Python 3.x,Argparse,我试图使用argparse在一个命令行中禁用相同的参数 ./python3 --argument1=something --argument2 --argument1=something_else 这意味着这将引发一个错误,因为argument1的值被覆盖,默认情况下,argparse只会覆盖该值并继续,就像什么都没发生一样。。。有什么聪明的方法可以禁用这种行为吗?我认为没有一种使用argparse的原生方法,但幸运的是,argparse提供了报告自定义错误的方法。最优雅的方法可能是定义一个检

我试图使用argparse在一个命令行中禁用相同的参数

./python3 --argument1=something --argument2 --argument1=something_else

这意味着这将引发一个错误,因为argument1的值被覆盖,默认情况下,argparse只会覆盖该值并继续,就像什么都没发生一样。。。有什么聪明的方法可以禁用这种行为吗?

我认为没有一种使用
argparse
的原生方法,但幸运的是,
argparse
提供了报告自定义错误的方法。最优雅的方法可能是定义一个检查重复项(如果有,则退出)的自定义操作

(阅读有关cutom操作的说明)

另一种方法是使用append操作并计算列表的len

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo', action='append')
args = parser.parse_args()

if len(args.foo) > 1:
    parser.error("--foo appears several times.")

没有内置测试或约束。
positional
参数将只处理一次,但是标记的(或
可选的
)参数可以重复,正如您所说的。这使您可以使用
append
count
操作收集多个事件

大多数人都可以接受覆盖操作。为什么您的用户会多次使用该选项?为什么第一个比最后一个更受欢迎

自定义操作可能是最佳选择。如果
命名空间[dest]
已具有非默认值,则可能会引发错误。或者,此操作可以向命名空间添加其他一些“repeat”标志

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo', action='append')
args = parser.parse_args()

if len(args.foo) > 1:
    parser.error("--foo appears several times.")