def bandwidth_type(x):
x = int(x)
if x < 12:
raise argparse.ArgumentTypeError("Minimum bandwidth is 12")
return x
parser.add_argument("-b", "--bandwidth", type=bandwidth_type, help="target bandwidth >= 12")
注意:与相比,我认为ArgumentTypeError
是一个更正确的例外ArgumentError
。但是,ArgumentTypeError
并未将其记录为公共类argparse
,因此在您自己的代码中使用它可能并不正确。我喜欢的一个选项是argparse.error
像alecxe一样在他的答案中使用,尽管我将使用自定义操作而不是类型函数来访问解析器对象。
更为灵活的选项是自定义操作,它提供对当前解析器和名称空间对象的访问。
class BandwidthAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
if values < 12:
parser.error("Minimum bandwidth for {0} is 12".format(option_string))
#raise argparse.ArgumentError("Minimum bandwidth is 12")
setattr(namespace, self.dest, values)
parser.add_argument("-b", "--bandwidth", action=BandwidthAction, type=int,
help="target bandwidth >= 12")