在 argparse 中使用 Python 的 add_argument 时,如果调用特定的已弃用标志,如何抛出异常?

问题描述 投票:0回答:2

基本上想象我有一个有多个参数的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
标志,然后引发异常,我想知道如何执行此操作以及哪个是最好的!谢谢。

python parsing exception action argparse
2个回答
2
投票

这是我的想法:

您可以为您的参数注册自定义操作,我注册了一个来打印弃用警告并从生成的命名空间中删除该项目:

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

0
投票

在项目的生命周期中,可能需要从命令行中删除一些参数。在删除它们之前,您应该通知您的用户这些参数已被弃用并将被删除。所以你的程序不应该停止,而应该显示警告。

从 python 3.13 开始,您可以在方法

deprecated
add_argument()
中使用参数
add_parser()
,它允许弃用命令行选项、位置参数和子命令。

在这种情况下,您需要做的就是:

group.add_argument( '--deprecateThis', deprecated=True)
© www.soinside.com 2019 - 2024. All rights reserved.