gpt4 book ai didi

python - argparse:ArgumentDefaultsHelpFormatter 和 MetavarTypeHelpFormatter

转载 作者:行者123 更新时间:2023-11-28 16:19:54 25 4
gpt4 key购买 nike

是否可以将 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!')

生成如下内容:

usage: PROG [-h] [--foo int] [float [float ...]]

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

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

最佳答案

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

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()

产生

2035:~/mypy$ python3.5 stack41195224.py 
usage: PROG [-h] [--foo float] [int [int ...]]

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

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

请注意,我还必须为位置指定 type。没有它我得到一个错误:

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

根据这个要求,我怀疑 MetavarTypeHelpFormatter 没有多大用处。默认的“字符串”类型(无)将产生错误。这是一个方便的格式化程序类,可能会产生比它解决的问题更多的问题。

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

子类化这 2 个类的替代方法是子类化它们的父类,并包含这 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)

仅使用

parser.add_argument('foobar')

产生

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

关于python - argparse:ArgumentDefaultsHelpFormatter 和 MetavarTypeHelpFormatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41195224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com