argparse:ArgumentDefaultsHelpFormatter与MetavarTypeHelpFormat

2024-10-02 08:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能将argparse.ArgumentDefaultsHelpFormatter的功能与argparse.MetavarTypeHelpFormatter结合起来?在

docs中有一些关于如何使用其中任何一个的示例,但是不清楚如何创建一个结合了两者优点的帮助文本?在

例如,我想要以下内容:

parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--foo', type=int, default=42, help='FOO!')
parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!')

产生如下的东西:

^{pr2}$

Tags: 文本功能adddefaultparser示例docsargparse
1条回答
网友
1楼 · 发布于 2024-10-02 08:20:28

理论上,您可以定义一个新的格式化程序类,它是其他两个类的子类。(我可以在开发人员建议的地方找到一个bug/问题。)这是否适用于这对代码需要在代码中进行测试或检查。基本上我们需要看看这两个类更改的方法是否兼容。在

import argparse
class MyFormatter(argparse.ArgumentDefaultsHelpFormatter, argparse.MetavarTypeHelpFormatter):
    pass
parser = argparse.ArgumentParser(prog='PROG', formatter_class=MyFormatter)
parser.add_argument(' foo', type=float, default=42, help='FOO!')
parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!', type=int)
parser.print_help()

生产

^{pr2}$

注意,我还必须为位置指定一个type。否则我就有个错误:

AttributeError: 'NoneType' object has no attribute '__name__'

有了这个需求,我怀疑MetavarTypeHelpFormatter没有得到太多的使用。默认的“string”类型(None)将产生错误。这是一个方便的格式化程序类,可能会产生比它解决的问题更多的问题。在

defaults帮助格式化程序只向帮助字符串添加一个“(default:%(default)s)”字符串。你可以自己做。所以这只是一个方便班,不是任何人都需要的。在

子类化这两个类的另一个选择是将它们的父类化,并包括这2个子类更改的所有方法。在


添加:

parser.add_argument('foobar', type=str)

显示器

1039:~/mypy$ python3 stack41195224_1.py 
usage: PROG [-h] [ foo float] [int [int ...]] str

positional arguments:
  int          BAR! (default: [1, 2, 3])
  str

optional arguments:
  -h,  help   show this help message and exit
   foo float  FOO! (default: 42)

使用just

parser.add_argument('foobar')

生产

AttributeError: 'NoneType' object has no attribute '__name__'

相关问题 更多 >

    热门问题