【问题标题】:Argparse"ArgumentError: argument -h/--help: conflicting option string(s): -h, --help"Argparse“ArgumentError:参数 -h/--help:冲突的选项字符串:-h,--help”
【发布时间】:2013-09-21 07:23:09
【问题描述】:

最近在学习argparse模块,代码下方出现Argument错误

import argparse
import sys


class ExecuteShell(object):
    def create(self, args):
        """aaaaaaa"""
        print('aaaaaaa')
        return args

    def list(self, args):
        """ccccccc"""
        print('ccccccc')
        return args

    def delete(self, args):
        """ddddddd"""
        print('ddddddd')
        return args


class TestShell(object):
    def get_base_parser(self):
        parser = argparse.ArgumentParser()
        parser.add_argument('-h',
                            '--help',
                            action='store_true',
                            help=argparse.SUPPRESS)

        parser.add_argument('-c', action='store',
                            dest='create_value',
                            help='create a file')

        parser.add_argument('-d', action='store',
                            dest='delete_value',
                            help='delete a file')

        parser.add_argument('-l', action='store',
                            dest='list_value',
                            help='list a dir')

        return parser

    def _find_actions(self, subparsers, actions_module):
        for attr in (action for action in dir(actions_module) if not  action.startswith('__')):
            callback = getattr(actions_module, attr)
            desc = callback.__doc__ or ''
            subparser = subparsers.add_parser(attr, description=desc)
            subparser.add_argument('-h', '--help', action='help',
                                   help=argparse.SUPPRESS)
            self.subcommands[attr] = subparser
            subparser.set_defaults(func=callback)

    def main(self, args):
        parser = self.get_base_parser()
        (options, args) = parser.parse_known_args(args)
        subparsers = parser.add_subparsers(metavar='<subcommand>')
        a = ExecuteShell()
        self.subcommands = {}
        subcommand_parser = self._find_actions(subparsers, a)


if __name__ == "__main__":
    a = TestShell()
    a.main(sys.argv[1:])

为什么会出现此错误,我该如何解决?

【问题讨论】:

  • 请先修复缩进...
  • 仅供参考,您不需要添加--help 选项,它会自动添加
  • 如果您试图防止添加--help参数,请参阅the docs

标签: python argparse


【解决方案1】:

argparse 默认添加--help-h 选项。如果您不想使用内置帮助功能,则需要使用以下命令禁用它:

parser = argparse.ArgumentParser(add_help=False)

documentation

【讨论】:

    【解决方案2】:

    另外2个场景同样的错误弹窗:

    1) 重复代码

    parser.add_argument('-h',
                            '--help',
                            action='store_true',
                            help=argparse.SUPPRESS)
    
    parser.add_argument('-h',
                            '--help',
                            action='store_true',
                            help=argparse.SUPPRESS)
    

    2) 当你在同一个内核上多次执行代码时

    我会留下它,以防万一有人遇到类似问题。

    【讨论】:

    • 我遇到的另一种情况是在使用parents 关键字参数时,父解析器或子解析器需要传入add_help=False 关键字参数以防止出现此错误。
    猜你喜欢
    • 2018-05-06
    • 2017-08-10
    • 2017-09-03
    • 2021-07-02
    • 2011-11-21
    • 1970-01-01
    • 2013-04-20
    • 2014-01-30
    • 1970-01-01
    相关资源
    最近更新 更多