0

我正在使用此答案中的一些代码,尤其是引发以下问题的部分argparse.ArgumentTypeError

raise argparse.ArgumentTypeError(
                "argument '{f}' requires between {nmin} and {nmax} "
                "arguments".format(f=self.dest, nmin=nmin, nmax=nmax))

但是,我还将append动作行为添加到我的子类'__call__()中,这意味着这些重复参数中的一个或多个可能格式不正确并可能引发ArgumentTypeError.

因此,当我在解析器中将其用于此类参数时:

parse = argparse.ArgumentParser()
parser.add_argument("-a", "--append-arg", action=append_range(2,3), default=[])

我因输入错误数量的参数而出错,我得到如下信息:

argparse.ArgumentTypeError: argument 'append_arg' requires between 2 and 3 arguments

太好了,这就是我希望它被使用的方式。但是现在参数列表append_arg在命名空间中命名。我希望它被命名list_of_repeated_args或其他。所以如果我这样做:

parser.add_argument("-a", "--append-arg", action=append_range(2,3), default=[], dest="list_of_repeated_args")

然后我得到了这个错误:

argparse.ArgumentTypeError: argument 'list_of_repeated_args' requires between 2 and 3 arguments

那不是我想要的。当然,我可以更改函数以将我想要的名称作为参数,但我只想自动使用该名称。有没有办法做到这一点?(即,我应该放置什么而不是f=self.dest?)

4

1 回答 1

1

想出了解决办法。根据文档__call__(),自定义方法的argparse.Action参数option_string是:

用于调用此操作的选项字符串。该option_string参数是可选的,如果操作与位置参数相关联,则该参数将不存在。

果然,如果我将以下代码更改使用option_string

raise argparse.ArgumentTypeError(
                "argument '{f}' requires between {nmin} and {nmax} "
                "arguments".format(f=option_string, nmin=nmin, nmax=nmax))

我得到了(假设我使用的是缩写形式)想要的效果:

argparse.ArgumentTypeError: argument '-a' requires between 2 and 3 arguments
于 2013-07-09T17:56:17.943 回答