基本上想象我有一个有多个参数的argparser。 我有一个特定的函数定义,如下所示:
def add_to_parser(self, parser):
group = parser.add_argument_group('')
group.add_argument( '--deprecateThis', action='throw exception', help='Stop using this. this is deprecated')
我是否可以尝试创建该操作来引发异常并停止代码,或者是否可以将其包装起来以检查
deprecateThis
标志,然后引发异常,我想知道如何执行此操作以及哪个是最好的!谢谢。
这是我的想法:
您可以为您的参数注册自定义操作,我注册了一个来打印弃用警告并从生成的命名空间中删除该项目:
class DeprecateAction(argparse.Action):
def __init__(self, *args, **kwargs):
self.call_count = 0
if 'help' in kwargs:
kwargs['help'] = f'[DEPRECATED] {kwargs["help"]}'
super().__init__(*args, **kwargs)
def __call__(self, parser, namespace, values, option_string=None):
if self.call_count == 0:
sys.stderr.write(f"The option `{option_string}` is deprecated. It will be ignored.\n")
sys.stderr.write(self.help + '\n')
delattr(namespace, self.dest)
self.call_count += 1
if __name__ == "__main__":
my_parser = ArgumentParser('this is the description')
my_parser.register('action', 'ignore', DeprecateAction)
my_parser.add_argument(
'-f', '--foo',
help="This argument is deprecated",
action='ignore')
args = my_parser.parse_args()
# print(args.foo) # <- would throw an exception
在项目的生命周期中,可能需要从命令行中删除一些参数。在删除它们之前,您应该通知您的用户这些参数已被弃用并将被删除。所以你的程序不应该停止,而应该显示警告。
从 python 3.13 开始,您可以在方法
deprecated
和 add_argument()
中使用参数 add_parser()
,它允许弃用命令行选项、位置参数和子命令。
在这种情况下,您需要做的就是:
group.add_argument( '--deprecateThis', deprecated=True)