""" Make argparse.SUPPRESS work as an argument "dest" jzwinck suggests _StoreAction: def __call__(self, parser, namespace, values, option_string=None): - setattr(namespace, self.dest, values) + if self.dest is not argparse.SUPPRESS: + setattr(namespace, self.dest, values) ... """ import argparse SUPPRESS = argparse.SUPPRESS class Action1(argparse._StoreAction): # _StoreAction with modified call def __call__(self, parser, namespace, values, option_string=None): if self.dest is not SUPPRESS: setattr(namespace, self.dest, values) else: print('Action1', argparse._get_action_name(self), values) class Action2(argparse.Action): # custom action def __init__(self, *args, **kwargs): super(Action2, self).__init__(*args, **kwargs) # play with attributes, e.g. dest, self.default = SUPPRESS # keeps default out of namespace # dist=SUPPRESS also keeps default out of namespace, # but affects usage as well def __call__(self, parser, namespace, values, option_string=None): print('Action2', argparse._get_action_name(self), values) parser = argparse.ArgumentParser() a1 = parser.add_argument('--foo', dest=SUPPRESS) a2 = parser.add_argument('--bar', action=Action1, dest=SUPPRESS, type=int) a3 = parser.add_argument('--baz', action=Action2, type=int) print(parser.format_help()) print(parser.parse_args([])) print(parser.parse_args()) """ usage: issue20430.py [-h] [--foo ==SUPPRESS==] [--bar ==SUPPRESS==] [--baz BAZ] optional arguments: -h, --help show this help message and exit --foo ==SUPPRESS== --bar ==SUPPRESS== --baz BAZ Namespace() Action2 --baz 123 Action1 --bar 456 Namespace(==SUPPRESS==='xxx') """